未知語の問題
2018-10-14
Xとnot Xを識別するNNを学習しようと思った
Xからvocabを作って、not Xのそのvocabに出てこない単語を
未知語にすると「未知語が出てきたらnot X」っていう自明な抜け道ができてしまう
両方の語彙を合成すべきなのだろうか?
unionしたところで、結局「この単語が出てきたらnot X」を覚えるのが手っ取り早いってことにならないか?
intersectしてしまおうか?
:>>> len(vocab)
37578
>>> len(c.keys())
4891
>>> len(set(c.keys()).intersection(vocab))
3592
Xの語彙の大部分が失われてしまうのではないか??
それでいいのか??
not Xの中のUNKの出現頻度を計算して、Xのvocabから同じ頻度でUNKになるように削るか?
:>>> sum(c.values())
354748
>>> sum(c[k] for k in c if k not in vocab)
16071
>>> 16071 / 354748
0.045302580987066875
:>>> z = np.load("words.npz")
>>> count = z["count"][:,1].astype(int)
>>> count.sum()
1633886
>>> _ * 0.0453
74015.0358
>>> count[count < 10].sum()
73467
>>> count[count <= 10].sum()
77827
10回以下しか出現しない単語をUNKにすればだいたい比率は同じか
それはまあありな気がする