研究開発部のサウラブ(bira)です。この機能を利用すると、ユーザがレシピのタイトルを入力することで、利用されるであろう材料が予測できます。要約レシピのタイトルから材料を予測できるモデルを作りました。投稿開発部と協力してレシピエディタに材料提案機能を追加しました。Storeで入手可能な最新のCookpadアプリ(v19.6.0.0)でこの機能を使用できます。Embeddingを学習してS3にアップロードします。特殊文字を削除します。多くのCookpadユーザーはテキストに特殊文字を使用しています。特殊文字には材料に関する情報が含まれていないので、それらを削除します。MeCabを使ってテキストをトークン化します。モデルを使用して、Cookpadデータベース内の各レシピのタイトルをベクトルに変換します。Product)、インデックスをS3にアップロードします。AIによって開発されたライブラリです。Faissは10億スケールのベクトルセットで最近傍検索をサポートします。Indexをダウンロードします。Indexをメモリにロードします。Embeddingモデルを使用して、入力されたタイトルをベクトルに変換します。Faissを使用してk個の類似するレシピを検索します。類似するレシピの中で最も一般的な材料を提案します。Embeddingモデル(Fasttext)を学習します。gensimでFasttextを使っていました。gensimはとても使いやすいです。epochs=ft_model.iter)なぜFasttextを選んだのですか?Fasttext(これは本質的にword2vecモデルの拡張です)は、各単語を文字n-gramで構成されているものとして考えます。そのため、単語ベクトルは、これらの文字数n-gramの合計で構成されます。例:”中華丼”の単語ベクトルはn-gram”<中”、”中”、”<中華”、”華”、”中華”、”中華丼>”、”華丼>”のベクトルの合計です。Fasttextはサブワード情報で単語ベクトルを充実させます。Embeddingsを生成します。言葉が稀であっても、それらの文字n-gramはまだ他の単語中に出現しています。例:”中華風”は”中華丼”や”中華サラダ”のような一般的な単語と文字n-gramを共有することは稀であるため、Fasttextを使用して適切な単語のEmbeddingを学習できます。学習用コーパスに単語が出現していなくても、文字のn-gram数から単語ベクトルを作成できます。Embeddingモデルを学習します。Embeddings:文は本質的に単語で構成されているので、単に単語ベクトルの合計または平均を取れば文のベクトルになると言えるかもしれません。このアプローチは、Bag-of-words表現に似ています。これは単語の順序と文の意味を完全に無視します(この問題で順序は重要でしょうか?🤔)。MeCabを使用して文を形態素解析します。残して、他の単語を除外します。Embeddingを取得し、それらを平均してタイトルベクトルを取得します。Embeddingを学習します。Similarityから導き出します。Similarityは次のように計算されます。Embeddingスペース内で互いに近くに配置することです。2つのレシピのタイトルと、これら2つのレシピの類似度を表すJaccardインデックスを含む各サンプル行を持つデータセットを作成します。)は、最もよく機能するようです。ネットワークにとって、回帰問題よりも分類問題の方が解きやすい場合があります。以下はサービスにおける利用率です。個が利用された割合です。Embeddingよりもこの問題に適しています。これは、レシピのタイトルは短いテキストであるために、単語順序の情報は材料を予測するのにはあまり役に立たないからだと思われます。まとめレシピのタイトルから材料を予測できるモデルを作りました。投稿開発部と協力してレシピエディタに材料提案機能を追加しました。いかがでしたでしょうか。Cookpadでは、機械学習を用いて新たなサービスを創り出していける方を募集しています。興味のある方はぜひ話を聞きに遊びに来て下さい。モデルを学習...研究開発部の菊田(@yohei_kikuta)です。