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

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

新規登録して質問してみよう
ただいま回答率
85.48%
自然言語処理

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

Q&A

解決済

2回答

2028閲覧

onehot表現などの文章の表し方について

kohekoh

総合スコア140

自然言語処理

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

0グッド

0クリップ

投稿2018/05/22 07:59

自然言語処理などをする際に
onehot表現などで文章を表現することがあると思います

様々な表現方法があると思うのですが
トークン化したときに、トークンすべてを数え上げて、
数字を割り当てる方法っていうのは一般的には使われないのですか?
この方法をみたことがなくて、気になりました
また使われないとしたら、その理由を教えていただければ
ありがたいです。

使われるとして、名称があれば教えてください
また、利点などもあれば教えてほしいです

例えば
「リンゴください」
の場合
リンゴ: 1 ください:2
のような感じです

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

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

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

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

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

guest

回答2

0

ベストアンサー

例だけではなんとも言えませんが、こんなイメージですか?

  • 「リンゴください。あとミカンもください」

リンゴ:1, ください:2, 。:3あと:4


質問文の手法は恐らくBag of Wordsのインデックスを作る作業に該当すると思われます。
これだけでは特に文書の特徴を反映する訳ではないので、インデックスに基いて単語の出現頻度でベクトルを作るのがBag of Words。
「単語」という単位で見ないで、たとえば2単語つながったもの(リンゴ-ください, ください-。等)を数え上げるのがbigram, 一般化してn個の単語がつながったものを数え上げるのがn-gram。
それを特定の品詞に絞ってみたり、品調ラベルを使ってみたり、似たような手法は色々あります。いずれも何らかの要素列に変換し、インデックスを作って数え上げるという点ではBag of Wordsと共通しています。

word2vec, doc2vec, DNN(LSTM等)による自然言語処理等はまた異なったアプローチで処理しています。

追記

なんか、回答書いてから言いたいことがわかったような気が・・・。
one-hot表現にしないで、1次元の数値で、たとえば100000単語あったら0~99999で表現しようということですか。
いろいろな欠点があります。

  • 単語はともかく、文書は1次元では表現できない。BoWならone-hot表現の加算とみなせます。
  • これも同じことですが、「似ている単語」と「そうでない」単語をどう区別しましょうか。数字が近いと似ている単語という扱いになってしまいそうです。one-hot表現であれば、すべて等しく似ている(似ていない)単語と解釈できます。分散表現系であれば、ベクトル空間内の距離で表せます。

投稿2018/05/22 09:57

編集2018/05/22 10:01
hayataka2049

総合スコア30933

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

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

kohekoh

2018/05/23 01:28

ありがとうございます 自分が言いたかったのは追記の内容です 数字が近いと似ている単語になってしまわないようにプログラミングしておけばいいのでは と思ってしまったのですが、それが難しいということですかね? ちなみに、文書が一次元で表現できないのはなぜですか?
hayataka2049

2018/05/23 01:43

一次元の値を単語・文書に割り当てるだけなら容易にできます。しかし、そうして得られた表現を何らかのタスクに応用する以上、単語・文書の情報を捉えられる方法で定量化しないと意味がない、というのが本質的な話です 一次元では大した情報は表せませんし、どう割り当てるかについてもうまい方法がなさそうです (質問文にあるように出現順で表したら意味のある情報はほぼないと言って良い)
kohekoh

2018/05/23 02:20

onehotも単語同士の距離は一定なので、意味ある情報をもたらすことはできないと思うのですが、どうなんですかね? onehotの利点は簡単なところだと思っていて、一次元で表す方法も簡単だと思うのですが、そこの違いはなにがあるのでしょうか
hayataka2049

2018/05/23 02:36 編集

one-hot表現の利点は、変な意味が入る余地がない点が大きいと言うべきかもしれませんね。すべての単語のベクトルが直交しますから、コサイン類似度を計算すれば問答無用で類似度0になります。 これがけっこう素晴らしい特性で、たとえば文書を表したければ文書内に出現する単語のone-hot表現をすべて加算すればよく、これがBoWです(ただし実際は頻度を数える)。 BoWだと「単語の意味」までは捉えられませんが、文書がどんな単語から構成されているかは表現できるので、それで意味のある距離が計算できますし、ということは機械学習なども適用できます。タスクにもよりますが、実際良い性能を発揮します(分散表現や深層学習が流行る前のスタンダードでした)。
kohekoh

2018/05/23 03:20

なるほど~ なんとなくわかってきた気がします それで一次元的な表現だと、変な意味(似てないのに似てるとか)が入っちゃうわけですね そこで、なんでそういう変な意味が入っちゃうんですかね?
hayataka2049

2018/05/23 08:48

なんでっていうか、たとえば「リンゴ」を予測させたい何らかのタスクがあったとして、ちょっと間違えるといきなり「ください」になってしまうので、とても不都合という話です。
kohekoh

2018/05/23 11:08

ありがとうございます
guest

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

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

kohekoh

2018/05/23 01:29

すみません 一個目のサイトにいけなかったのと、 二個目のサイトのどこを見ればいいのでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問