「ユーザの入力クエリ」 AND/OR 「追加クエリ」 で検索を行うケースにて、
ユーザー入力クエリに対して類似度が高いワードリストを追加クエリの候補とする。
類似度順に並べるのではなくそれ等の中でも比較して意味の多様性をとらえて生かしたい。
類似単語をクラスタリングし、各クラスタから新候補の単語を選択することで、多様な意味の異なりをクエリに反映させる。
topk-clustering.py
1.word2vec学習済みのモデルから、入力クエリに対して類似単語をtop_k 数十件取得する
2.取得した単語をクラスタリングする。クラスタ数は決め打ち。
3.各クラスタから入力クエリ以外の単語を選択する
4.追加クエリをクラスタからの選択する. 方法は、ランダム、クラスタ中心、クエリから一番近い/遠い点 などが候補.
query_word = 'エネルギー' # クエリ単語
top_k = 30 # 取得する単語数
n_clusters = 5 # クラスタの数
>>>
Cluster 0: ['運動エネルギー', '中性子', '太陽エネルギー', '[運動エネルギー]', '[プラズマ]', '光エネルギー', '熱量', '[位置エネルギー]', '波動', '[熱エネルギー]', 'プラズマ', '[光子]', '輻射', '[潜熱]', '[反物質]', '電磁波', '[中性子線]']
Cluster 1: ['[エネルギー]', '[熱]', '熱']
Cluster 2: ['[中性子]', '粒子', '質量', '[電子]', '[電荷]', '物質']
Cluster 3: ['魔力', 'パワー']
Cluster 4: ['重力', '[重力]']
データセットでfine-tune
事前学習済みモデルではなく検索対象ドキュメントで学習させる
- (予想)ドキュメントだけで学習させた場合、word2vecでではユーザーの入力クエリがそもそも未知語になる場合が多いのでは. 表記ブレある程度対応するfasttextの方がよい?
- (予想)学習済みモデルにドキュメントを追加するfine-tune. 学習時間はかかりそう fasttextなら早いが