実践 自然言語処理ー実世界NLPアプリケーション開発のベストプラクティス
実践 自然言語処理 ―実世界NLPアプリケーション開発のベストプラクティス
オライリー・ジャパン
著者:Sowmya Vajjala、Bodhisattwa Majumder、Anuj Gupta、Harshit Surana
訳者:中山光樹
賞賛の声
序文
訳者まえがき
まえがき
第I部 基礎
1章 自然言語処理入門
1.1 実世界での自然言語処理
1.1.1 NLPのタスク
1.2 言語とは何か
1.2.1 言語の構成要素
1.2.2 自然言語処理の難しさ
1.3 機械学習、ディープラーニング、そして自然言語処理の概要
1.4 自然言語処理のアプローチ
1.4.1 ヒューリスティックを用いた自然言語処理
1.4.2 機械学習を用いた自然言語処理
1.4.3 ディープラーニングを用いた自然言語処理
1.4.4 ディープラーニングがまだ銀の弾丸でない理由
1.5 ケーススタディ:会話エージェント
1.6 まとめ
2章 NLPのパイプライン
2.1 データ収集
2.2 テキストの抽出とクリーニング
2.2.1 HTMLの解析とクリーニング
2.2.2 Unicodeの正規化
2.2.3 スペル修正
2.2.4 システム固有の誤り訂正
2.3 前処理
2.3.1 準備
2.3.2 よく使う前処理
2.3.3 その他の前処理
2.3.4 高度な前処理
2.4 特徴エンジニアリング
2.4.1 古典的なNLPと機械学習のパイプライン
2.4.2 ディープラーニングのパイプライン
2.5 モデリング
2.5.1 シンプルなヒューリスティックから始める
2.5.2 モデルの構築
2.5.3 モデルの性能改善
2.6 評価
2.6.1 内省的評価
2.6.2 外省的評価
2.7 モデリング後のフェーズ
2.7.1 デプロイ
2.7.2 監視
2.7.3 モデルの更新
2.8 英語以外でのアプローチ
2.9 ケーススタディ
2.10 まとめ
3章 テキストの表現
3.1 ベクトル空間モデル
3.2 ベクトル化の基本的な考え方
3.2.1 One-hotエンコーディング
3.2.2 Bag of Words
3.2.3 Bag of N-grams
3.2.4 TF-IDF
3.3 分散表現
3.3.1 単語埋め込み
3.3.2 埋め込みの組み合わせ
3.4 文書の分散表現
3.5 普遍的なテキスト表現
3.6 埋め込みの可視化
3.7 手動で設計した特徴表現
3.8 まとめ
第II部 必須事項
4章 テキスト分類
4.1 アプリケーション
4.2 テキスト分類システム構築のためのパイプライン
4.2.1 テキスト分類パイプラインを使わないシンプルな分類器
4.2.2 既存のテキスト分類APIの利用
4.3 1つのパイプラインに複数の分類器
4.3.1 ナイーブベイズ分類器
4.3.2 ロジスティック回帰
4.3.3 サポートベクトルマシン
4.4 テキスト分類におけるニューラル埋め込みの利用
4.4.1 単語埋め込み
4.4.2 サブワードの埋め込みとfastText
4.4.3 文書埋め込み
4.5 ディープラーニングを用いたテキスト分類
4.5.1 CNNによるテキスト分類
4.5.2 LSTMによるテキスト分類
4.5.3 大規模な事前学習済み言語モデルを用いたテキスト分類
4.6 テキスト分類モデルの解釈
4.6.1 Limeを用いた分類器の予測の説明
4.7 データが限られた場合の学習方法とドメイン適応
4.7.1 学習データが存在しない場合
4.7.2 学習データが少ない場合:アクティブラーニングとドメイン適応
4.8 ケーススタディ:会社のチケット管理
4.9 実践的なアドバイス
4.10 まとめ
5章 情報抽出
5.1 情報抽出のアプリケーション
5.2 情報抽出タスク
5.3 情報抽出の一般的なパイプライン
5.4 キーフレーズ抽出
5.4.1 キーフレーズ抽出の導入
5.4.2 実践的なアドバイス
5.5 固有表現認識
5.5.1 固有表現認識器の構築
5.5.2 既存のライブラリを利用した固有表現認識
5.5.3 アクティブラーニングを用いた固有表現認識
5.5.4 実践的なアドバイス
5.6 固有表現の曖昧性解消とエンティティリンキング
5.6.1 Azure APIを用いたエンティティリンキング
5.7 関係抽出
5.7.1 関係抽出へのアプローチ
5.7.2 Watson APIを用いた関係抽出
5.8 高度な情報抽出タスク
5.8.1 時間情報の抽出
5.8.2 イベント抽出
5.8.3 テンプレートフィリング
5.9 ケーススタディ
5.10 まとめ
6章 チャットボット
6.1 アプリケーション
6.1.1 シンプルなFAQボット
6.2 チャットボットの分類法
6.2.1 タスク指向の対話
6.2.2 雑談
6.3 対話システム構築のためのパイプライン
6.4 対話システムの詳細
6.4.1 ピザ屋ボット
6.5 対話システムのコンポーネントの詳細
6.5.1 対話行為の分類
6.5.2 スロットの識別
6.5.3 応答生成
6.5.4 対話タスクの実装例
6.6 その他の対話パイプライン
6.6.1 エンドツーエンドなアプローチ
6.6.2 対話生成のための深層強化学習
6.6.3 Human-in-the-Loop
6.7 Rasa NLU
6.8 ケーススタディ:レシピ推薦
6.8.1 既存のフレームワークの活用
6.8.2 オープンエンドの生成型チャットボット
6.9 まとめ
7章 その他のトピック
7.1 情報検索
7.1.1 検索エンジンの構成要素
7.1.2 典型的なエンタープライズ検索におけるパイプラインの例
7.1.3 検索エンジンの設定例
7.1.4 ケーススタディ:ブックストア検索
7.2 トピックモデル
7.2.1 トピックモデルの学習例
7.2.2 次のステップ
7.3 テキスト要約
7.3.1 要約のユースケース
7.3.2 要約の実装例
7.3.3 実践的なアドバイス
7.4 テキストデータのための推薦システム
7.4.1 書籍推薦システムの作成例
7.4.2 実践的なアドバイス
7.5 機械翻訳
7.5.1 機械翻訳APIの利用例
7.5.2 実践的なアドバイス
7.6 質問応答システム
7.6.1 独自の質問応答システムの開発
7.6.2 より深い回答を探して
7.7 まとめ
第III部 応用
8章 ソーシャルメディア
8.1 アプリケーション
8.2 ソーシャルメディアならではの難しさ
8.3 ソーシャルデータに対するNLP
8.3.1 ワードクラウド
8.3.2 ソーシャルテキスト用のトークナイザー
8.3.3 トレンドトピック
8.3.4 Twitterのセンチメントを理解する
8.3.5 ソーシャルテキストの前処理
8.3.6 ソーシャルテキスト用のテキスト表現
8.3.7 ソーシャルメディア上でのカスタマーサポート
8.4 ミームとフェイクニュース
8.4.1 ミームの識別
8.4.2 フェイクニュース
8.5 まとめ
9章 Eコマースと小売
9.1 Eコマースのカタログ
9.1.1 レビュー分析
9.1.2 商品の検索
9.1.3 商品の推薦
9.2 Eコマースにおける検索
9.3 Eコマースカタログの構築
9.3.1 属性抽出
9.3.2 商品のカテゴリ化とタクソノミー
9.3.3 商品のエンリッチメント
9.3.4 商品の重複除去とマッチング
9.4 レビュー分析
9.4.1 センチメント分析
9.4.2 アスペクトレベルのセンチメント分析
9.4.3 総合評価とアスペクトの結びつけ
9.4.4 アスペクトの理解
9.5 Eコマースにおける推薦システム
9.5.1 ケーススタディ:代替財と補完財
9.6 まとめ
10章 医療、金融、そして法律
10.1 医療
10.1.1 健康と診療記録
10.1.2 患者の優先順位付けと請求
10.1.3 医薬品安全性監視
10.1.4 臨床意思決定支援システム
10.1.5 ヘルスアシスタント
10.1.6 電子健康記録
10.1.7 メンタルヘルスの監視
10.1.8 医療情報の抽出と分析
10.2 金融と法律
10.2.1 金融におけるNLPのアプリケーション
10.2.2 NLPと法的景観
10.3 まとめ
第IV部 総括
11章 エンドツーエンドのNLPプロセス
11.1 パイプライン再訪:NLPソフトウェアのデプロイ
11.1.1 シナリオの例
11.2 成熟したシステムの構築と保守
11.2.1 より優れた特徴の探索
11.2.2 現行モデルの反復的な改善
11.2.3 コードとモデルの再現性
11.2.4 トラブルシューティングと解釈可能性
11.2.5 監視
11.2.6 技術的負債の最小化
11.2.7 機械学習プロセスの自動化
11.3 データサイエンスのプロセス
11.3.1 KDDプロセス
11.3.2 MicrosoftのTeam Data Science Process
11.4 AIプロジェクトを成功させる方法
11.4.1 チーム
11.4.2 正しい問題と正しい期待
11.4.3 データとタイミング
11.4.4 優れたプロセス
11.4.5 その他の観点
11.5 機械学習の未来
11.6 おわりに
付録A spaCyを使った日本語処理
A.1 はじめに
A.2 インストール
A.3 spaCyの基本的な概念
A.4 基本的なNLPタスクの実行方法
A.4.1 トークン化
A.4.2 品詞タグ付け
A.4.3 依存構造解析
A.4.4 固有表現認識
A.5 ルールベースの処理
A.5.1 Matcher
A.5.2 PhraseMatcher
A.5.3 EntityRuler
A.5.4 DependencyMatcher
A.6 spaCy Projectsを用いたワークフローの作成
A.6.1 プロジェクトのクローン
A.6.2 データの取得
A.6.3 モデルのダウンロード
A.6.4 データの前処理
A.6.5 設定ファイルの作成
A.6.6 モデルの学習
A.6.7 モデルの評価
A.6.8 モデルの可視化
A.7 まとめ
A.8 参考文献
索引