2022年4月8日金曜日

Wordle(5)

Wordle(4)からの続き

前回の復習:英文のテキストデータセットと単語の文字数 n が与えられたとする。文字数がnの単語を1行とした一時ファイルを作る。大文字は小文字に変換している。次に,wc -l によって一時ファイルの行数=n文字単語数を出力したものを並べたファイルを作る。また,上記の wc -l の前にsort | uniq フィルターをかけてユニークな n文字単語数についても同様のファイルを作る。これが,前回のwords.shプログラムのアルゴリズムだった。

具体例として,最初は手元にある数冊の英書の数千ページ(80MB)のpdfファイルからユニークにソートされた5文字単語(3万4千語)を抽出したものでテストした。もう少し大きなデータがないかと,オープンコーパスを色々探してみたが,なかなか適当なものがない。

最終的に,Wikipediaの記事を使ったデータセットにたどり着いた。多言語のWIki-40Bが前処理済で良さげだったが,TensorFlowを使えという指示が面倒であり,英語データで340万ページ2GBは大きすぎる。WikiText-103 Word Levelの方は,圧縮後181MBでそのままダウンロードできそうなので,こちらを使うことにした。

WikiText-103 Word Levelの解凍後のテキストデータは539MBあった。これをwords.shにかけると,1-20文字の単語(うちユニークな語)が約8300万語(約21万語),このうち5文字の単語(うちユニークな語)が約960万語(約2万4千語)であった。

WikiText-103 Word Level における,n文字単語(うちユニークな語)の出現頻度を下図に示す(オレンジが総語数の出現頻度,ブルーがユニーク語数の出現頻度)。n文字単語の出現ピークはn=3にあって約20%,ユニークなn文字単語の出現ピークはn=7にあって,約16%となった。5文字単語の場合は,ともに約11%となっている。


図:WikiText-103 Word Levelにおける単語出現頻度(横軸は文字数)

0 件のコメント: