u++の備忘録

typo辞書を人力で作るためのTips

準優勝したKaggleのPetfinderコンペでは、元データの英単語の綴りミスなどの修正に用いる辞書を手動で構築しました。

upura.hatenablog.com

本記事では、このような辞書を構築した方法についてまとめます。

結論

気合いで目で見ながら作りました。

概説

今回、元データを確認し、最終的には次のような辞書を構築しました。例えば1行目は "sherpherd" という綴りを "shepherd" に修正するという意味です。最終的には200個くらいのペアを作成しました。

{
    u"sherpherd": u"shepherd",
    u"sherphed": u"shepherd",
    u"sherperd": u"shepherd",
    u"sherpard": u"shepherd"
}

ここで大切なのは、如何にして綴りミスを効率的に発見するかです。もちろん自然言語処理の技術を活用すれば、ある程度自動的に綴りミスを発見できるかと思います。ただし今回は実装の時間・手間や網羅性などを考慮し、人力で辞書を構築することに決めました。

綴りミスを発見した手順は以下の通りです。最初の2つは同じチームだったtakuokoさんに作業してもらい、私は最後の気合いの部分を担当しました。

  1. embeddingのout of vocabularyとなる単語を抽出する
  2. 登場回数を集計して降順にソートする
  3. Wordに貼って、赤下線を参考にしながら綴りミスを見つける

embeddingのout of vocabularyとなる単語を抽出する

最初に、対象のデータセットに含まれている単語の中で、分散表現の学習済モデルには含まれていない単語(以下、out of vocabulary)を抽出します。この処理を通じて、対象の単語群から綴りが正しい単語を取り除くことが可能です。

登場回数を集計して降順にソートする

次いで、out of vocabularyの中で、単語の登場回数を集計し、降順にソートします。例えば次のような結果が得られます。

sherpard	100
sherperd	50
sherphed 	2
sherpherd	1

この処理には、修正し得る単語候補の優先順位を付ける意味合いがあります。

Wordに貼って、赤下線を参考にしながら綴りミスを見つける

この処理では集計結果を丸ごとWordに貼ることで、綴りミスを峻別しやすくしています。次の例では参考までに正しい綴りを一番上に載せました。正しい綴り以外に赤下線が引かれていると分かります。このWordの機能を活用することで、少しだけ効率的に綴りミスを探すことができました。

f:id:upura:20190626150038p:plain

おわりに

本記事では、綴りミスなどの修正に用いる辞書を手動で構築する方法を述べました。あくまで、私がPetfinderコンペの際に取り組んだ方法に過ぎないので、より効率的な方法があるかとは思いますが、一つのやり方として参考になれば嬉しいです。