質問: ### 前提・実現したいこと 機械学習によって、単語にタグ付けをしたい 以下のような事は、Word2Vecなどで実現可能なのでしょうか? それとも、別に、このアルゴリズムの方が実現できるなどがあれば、 ご教示いただきたいです! ■入力単語 りんご リンゴ 林檎 りんごEx アップル Apple みかん オレンジ ぶどう グレープ マスカット ■結果 | 入力単語 | タグ | | --- | --- | | りんご | りんご | | リンゴ | りんご | | 林檎 | りんご | | りんごEx | りんご | | アップル | りんご | | Apple | りんご | | みかん | みかん | | オレンジ | みかん | | ぶどう | ぶどう | | グレープ | ぶどう | | マスカット | ぶどう |
回答: 方法1: word2vecを使うなら、たとえばクラスタリングしてしまうのが手です。10万単語学習させておいて、1000クラスタくらいまでクラスタリングすれば望むようなものが一応できます。 ただし、クラスタの粒度をコントロールしづらい(「りんご」「みかん」「ぶどう」でまとまる保証はどこにもない。「果物」とかでまとまっちゃう可能性だって十分ある)のと、クラスタリングはタグ付けはしてくれないので何らかの方法でタグを付ける必要がある(人が見て決める。もしくはクラスタに属する単語の平均を取り、cosine類似度が平均に一番近い単語を取るなどのアプローチを取る)ことが難点です。 方法2: Latent Dirichlet Allocationという手もあります。word2vecのような分散表現とはまた少し違った手法で、単語の出現頻度から潜在的なtopicを推定してくれます。どちらかといえばword2vecなどを使った方が高い性能が得られるシチュエーションが多いようですが、LDAもまだ選択肢にはなります。 方法3: wordNetのようなシソーラスを使い、同義語・類義語を適当なレベルでグルーピングしてしまうという解決策があります。これもけっきょくグルーピングの粒度は人が決めることになります。また、未知語をどう取り扱うかが深刻な問題になります。 方法4: 対象にする単語が少ないなら(せいぜい1000単語以下、本当に「りんご」「みかん」「ぶどう」だけ処理するといった場合)、googleで検索したり辞書を読むなどして類義語や同義語、関連語を調べ、人手で(質問者様が)ひたすらタグを登録していく。手間はかかりますが、確実な方法です。