質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

Q&A

解決済

3回答

248閲覧

自然言語処理のシステム開発について

Taka_Yamag

総合スコア29

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

自然言語処理

自然言語処理は、日常的に使用される自然言語をコンピューターに処理させる技術やソフトウェアの総称です。

0グッド

1クリップ

投稿2019/03/07 07:45

100テキストある資料集をそれぞれベクトル化し、ある文章が入力されたら、それらとのコサイン距離の近いものを表示するシステムを現在考えています。
どのようにすれば、そういったシステムを実現できますでしょうか。
例えば、以下のような配列があります。これをベクトル化したものと同じベクトル化を入力されたデータに対して行いたいと考えています。

['本人', 'サービス', '受入れ', '拒否', 'ある', '事例', '事例', '歳', '女性', '認知', '症', '本人', '意思', '尊重', 'し', '家族', '入浴', '拒否', '対応', 'し', '事例', '居宅', '~', '本人', 'サービス', '受け入れ', '拒否', '本人', '意思', '尊重', 'し', '工夫', 'し', '利用', 'つなげ', '事例', '~', '支援', '困難', '考え', 'られる', '理由', '本人', '状況', '本人', 'サービス', '利用', '受け', '入', 'れ', '拒否', 'ある', '長男', '夫婦', '孫', '夫婦', '同居', '歳', '女性', '認', '知', '症', 'デイサービス', '入浴', '受け入れ', '拒', '否', '家族', '事業', '所', '協力', 'し', '時間', 'かけ', 'サービス', '受け入れ', '促し', '概要', '家族', '世帯', '状況', '長男', '夫婦', '孫', '夫婦', '同居', '介護', '者', '長男', '夫婦', '本人', '情報', '年齢', '性別', '設定', '歳', '女性', '介護', '障害', '自立', '度', 'J', '認知', '症', 'Ⅱ', 'a', '認知', '症', '大動脈', '弁', '狭窄', '症', '身体', '機能', '問題', '病名', 'ADL', '経済', '状況', '遺族', '年金', '不動産', '収入', 'あり', '生活', '困ら', '本人', '意向', '家', '前', '畑', '草取り', '好き', '昔', '大勢', '人', '中', '過ごす', 'の', '苦手', '家族', '状況', '住環境', '本人', '歳', '夫', '年', '前', '死亡', '長男', '歳', '長男', '妻', '歳', '次男', '歳', '長女', '歳', '次女', '歳', '孫', '歳', '孫', '夫', '歳', 'ひ孫', '歳', 'H', '年月', '新築', 'バリアフリー', '生活', '状況', '夫', 'H', '年', '他界', '現在', '息子', '夫婦', '孫', '夫婦', '同居', '専業', '主婦', '外', '働い', 'こと', '農業', 'し', '子育て', '趣味', '頃', '野菜', '作り', '好き', '身体', '機能', '問題', '認知', '症状', '食べ物', '引き出し', 'タンス', '入れる', '入浴', '嫌がる', 'メモ', 'とっ', '気', '向く', '日記', 'つける', '習慣', 'ある']

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/03/07 07:56

キーワードとしては、[word2vec コサイン距離]ではないでしょうか
guest

回答3

0

ベストアンサー

どうやってベクトル化するかによります。

  1. BoW, n-gramなど

古典的ですが、十分使えるかもしれません。BoWなら既知文書からWordsのインデックス配列を作っておいて、既知文書も未知文書もそれに基づいてベクトル化するという手順を踏みます。既知文書が「わんわん にゃーん」「にゃーん」ならインデックスは["わんわん", "にゃーん"]で既知文書のベクトルは[1,1][0,1]、「わんわん ぱおーん」という未知文書のベクトルは[1,0]になる(未知語はしょうがないので捨てる)という感じです。単純そうですが、自分でpythonで書いてもあまり速くならないので、gensimやscikit-learnなどのライブラリを頼ると良いと思います。

  1. word2vecなど

単語の分散表現に基づいて作る場合は、単語の分散表現のデータを予め作っておいて(あるいはどこかからもらってきて。この方が実用上良いかもしれない)、その平均などで処理することになるでしょう。既知文書も未知文書も同じ方法で行けると思います。

  1. doc2vecなど

文書の分散表現を作る手法の場合、学習させるのに使った文書はそのままベクトルが得られます。未知文書のベクトルは「予測する」ための機能がたいてい提供されています。性能は微妙かも。

  1. RNN系の手法を使って文書埋め込みを作る

同じRNNに通して予測させれば出てくるだろうけど、このタスクでそこまでやる必要はないと思います。

1か2がおすすめです。BoWは単純そのものだし、単語の分散表現も学習済み日本語モデルをもらってきて文書内に出現する単語のベクトルを出して平均したりするだけなので簡単です。

投稿2019/03/07 08:39

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

似て非なるものかもしれませんが、1問1答なら「ナイーブベイズ」で、簡易Botが実現出来ています。
ただし、私はPHP + MySQLで作成したので動作が重いです。

「ナイーブベイズ 自然言語」などのキーワードで検索して、Python例を探してみたらいかがでしょうか。

過去の回答者の通り、1長1短あると思います。

投稿2019/03/07 08:58

SaintKnowledge

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ドキュメントを単語やn-gramでベクトル化して、クエリベクトルとのコサイン類似度でランキングして提示する…ていうのは転置インデックスを使ったウェブ検索とかと原理的には同じです。
クエリ文字列が文章なとき、つまりクエリに含まれるtermが多い時は、調べるべきposting listの数が多くなり、レイテンシに問題が出てきます。
WAND (Weak AND) を使うと、クエリに含まれるtermが多い時に、レイテンシの悪化を緩和できたりします。

投稿2019/03/07 08:24

set0gut1

総合スコア2413

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問