LoginSignup
6
4

More than 3 years have passed since last update.

自然言語処理における言語データの保存方法をまとめてみた

Posted at

あなたの言語データ、正しく管理できてますか?

自然言語処理(NLP)で単語の頻度や埋め込みベクトルなどを扱っている皆様こんにちは!

生テキストBoW埋め込み表現等、言語処理で使われるデータはいろいろありますがどのように管理してますか?

これらのデータの管理法についての議論が少ないように感じたので寄稿いたしました。
私がpythonをよく使うので少しpythonista寄りの記事なるかもしれませんがそこはご理解ください。
個々の方法についてはデータの構造、規模、用途により変わるため
今回は事例紹介にとどめておきます。

主な管理方法として以下があると思います。(他にもあればコメントお願いします!)

管理方法一覧(サービスと保存形式がごっちゃになってますが、ここでは管理方法としてあえて一緒にしてます)
- RDBMS
- NoSQL
- NewSQL
- 全文検索エンジン (Elasticsearch等)
- BigQuery
- CSV(Excel)
- txt
- XML
- 生json
- オントロジ(LOD)
- 生プログラミング言語の変数

また、前処理等をしてから保存するのか、保存したrawデータに対して解析時に逐次前処理するのか
という疑問もあると思います。

やっかいなのが機械学習・NLPの入門書では自分でデータを作って管理することについて
述べている書籍は少ないと感じました。(著者が読んだ本の中では)
なので、データエンジニアリング初心者の方がどのように保存していいか迷うことがあると思います。

前例から学ぼう

有名データセット編

では有名(テキスト)データセットはどのように保存されているか見ていきましょう

  • IMDB
    皆さんおなじみの映画のレビューデータはレビュー自体はtxt
    ボキャブラリーデータはvocabという拡張子のテキストデータでした。

  • 20 Newsgroups
    こちらもそのままテキストでした。IMDBと違うのはvocabファイルがないためボキャブラリー数は自分でカウントする必要があります。

  • DBpedia
    DBpediaというwikipeidaデータからオントロジを構築するプロジェクト
    wikipediaの記事及びリンクの関係も指定して細かく取得することできる
    *wikipediaのダンプデータもあるがこちらはXML
    alt
    画像引用:https://medium.com/openlink-software-blog/what-is-dbpedia-and-why-is-it-important-d306b5324f90

やはり広く公開するデータセットの特性上プラットフォームを問わず開けるtxtが多いですね

各企業のノウハウ編

NLP関連かつDB周りのアーキテクチャを公開している企業さんの記事を探してみました。

  • Oracle
    当然といえば当然だがOracleDBとセットで機械学習できるOracle Data Minerを推奨している。 利点はOracleDBから実行できデータの加工やパラメータ設定を自動で行ってくれるそう。

データベースで始める機械学習

  • DATUM STUDIO
    TECHブログの記事ではMySQLを使用しています。Tweet文書データのidをキーに文書自体を保存してます。そして分析時に前処理をしているようです。

alt

         id: 663269643650404353
   user_id: 945808578
      text: 商品が売れている証拠だ
created_at: 2015-11-08 08:19:40

【特別連載】 さぁ、自然言語処理を始めよう!(第1回: Fluentd による Tweet データ収集)

自然言語処理系の研究室

こちらでは自然言語処理の専門家である山本先生がテキストをDB化することについて述べています。
要約すると
生データだと容量がヤバイ!=> RDB使って容量とそこそこの高速化を担保

言語処理でデータベース

ちなみに同研究室HPではNoSQLについても述べている。

NoSQL

方法から学ぶ編

ここではwebで見つけたNLP関連のデータ管理について方法を軸にまとめていきます。

まとめ

データの管理方法にベストはありませんが、私の経験と上の事例から用途ごとおおかに分けることができます。

  1. 広く多くの人に公開したい=>txt
  2. 言語処理以外も含めて様々なタスクで高頻度で利用したい=>RDB
  3. 言語処理のみだが高頻度かつ高度な分析で利用したい=>NoSQL or 全文検索エンジン
  4. 少量データのみで手軽に集計・分析したい=>CSV
  5. 制作に時間をかけても精密な分析を行いたい=>オントロジ(LOD)
6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4