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

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

ただいまの
回答率

90.85%

  • 自然言語処理

    69questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 74

kohekoh

score 103

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

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

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

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

    

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

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

  • 「リンゴください。あとミカンもください」
    リンゴ: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/23 10:28

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

    キャンセル

  • 2018/05/23 10:43

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

    キャンセル

  • 2018/05/23 11:20

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

    キャンセル

  • 2018/05/23 11:36 編集

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

    キャンセル

  • 2018/05/23 12:20

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

    キャンセル

  • 2018/05/23 17:48

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

    キャンセル

  • 2018/05/23 20:08

    ありがとうございます

    キャンセル

0

http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html
https://qiita.com/asatohan/items/7a247eb533a5adba9e87

http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html
単語の繋がりまで考慮した処理までも一般的です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/23 10:29

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

    キャンセル

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

  • ただいまの回答率 90.85%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • 自然言語処理

    69questions

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