Ahogrammer

Deep Dive Into NLP, ML and Cloud

自然言語処理

言語が混在したソーシャルメディアの固有表現認識

ACL 2019より以下の論文を紹介。今後、意外と必要になるかもしれないので取り上げた。 Corpus Creation and Analysis for Named Entity Recognition in Telugu-English Code-Mixed Social Media Data この論文では、テルグ語と英語が混じったソーシャルメデ…

固有表現辞書を使って固有表現認識の性能を向上させる

ACL 2019より以下の論文を紹介。 Towards Improving Neural Named Entity Recognition with Gazetteers この論文は、固有表現辞書を使って固有表現認識の性能を向上させる手法を提案した論文。手法としては、BiLSTMの最終層にHybrid Semi-Markov CRFs(HSCRFs…

低リソースかつノイジーなテキストに対する固有表現認識

ACL 2019より以下の論文を紹介。 Towards Robust Named Entity Recognition for Historic German この論文は、昔のドイツ語(1700年〜1900年くらい)に対する固有表現認識を行った論文。「昔のドイツ語の固有表現認識になんか興味ねーよ」と思うかもしれないが…

多言語BERTの多言語転移性能はどのくらいなのか?固有表現認識と品詞タグ付けで示してみた。

ってことで、ACL 2019より以下の論文を紹介。著者のサイトにスライドが公開されていたのでそちらも載せておく。 【論文】How Multilingual is Multilingual BERT? 【スライド】How Multilingual is Multilingual BERT? 多言語BERTは言語間の転移で優秀な性能…

多言語BERTを言語ごとにチューニングして固有表現認識の性能を向上させる

ACL 2019より以下の論文を紹介。 Tuning Multilingual Transformers for Language-Specific Named Entity Recognition この論文は、ロシア語、チェコ語、ブルガリア語、ポーランド語に対する固有表現認識をBERTを使って解いた論文。Googleの公開している多言…

入れ子になった固有表現認識のデータセット

ACL 2019より以下の論文を紹介。 NNE: A Dataset for Nested Named Entity Recognition in English Newswire この論文は、入れ子になった固有表現認識のデータセットを提案した論文。現在、一般的によく使われている固有表現認識のデータセットがフラットな…

辞書と生テキストから固有表現認識のモデルを学習させる

書いている本も山場を超えたので、ACL 2019の論文をパラパラと見ていたところ、以下の論文を発見。 Distantly Supervised Named Entity Recognition using Positive-Unlabeled Learning この論文がどういう論文なのかというと、辞書と生テキストだけを使って…

バイオ医療分野と固有表現認識

最近、職場の同僚が「医療/製薬分野に自然言語処理を使えないか」というような話をしていた。私自身はその分野にそれほど関心が高かったわけではないが、固有表現認識系の論文で医療/化学ドメインに対する取り組みが行われているのは今までに目にしていた。…

文字ベース固有表現認識の手法たち

固有表現認識(NER: Named Entity Recognition)とは、テキストに出現する人名や地名などの固有名詞や、日付や時間などの数値表現を認識する技術です。NERはエンティティリンキングや関係抽出、イベント抽出、共参照解決といった自然言語処理タスクの要素技…

文の分散表現を計算するためのデータセットを作って公開する

先日、SageMakerのObject2vecに新機能が追加された。機能としては、ネガティブサンプリングの自動化、重み共有、学習の高速化といった機能が追加されており、以下のNotebookから試すことができる。このNotebookでは英文の分散表現の計算、モデルのデプロイ、…

Kerasで固有表現認識のf1スコアを計算する

一般に固有表現認識では、学習済みモデルの性能を評価するためにf1が使用されます。その際、評価はトークンごとではなくエンティティごとに行われるのが特徴となっています。 f1スコアを評価する関数は、多くの機械学習フレームワークに実装されています。し…

日本語 Sentiment Analyzer を作ってパッケージ化した話

Sentiment Analysisと言えば自然言語処理ではよく知られたタスクで、典型的にはテキストをポジティブ/ネガティブの2クラスに分類するものだ。 その使い道としては、Twitter等のSNSから自社製品についての投稿を収集して評価や緊急度によって分類し、問題に対…

テキストの構造化を支える技術 -OpenIEの未解決問題-

第3回目の今回は節ベースのOpenIE手法を紹介する予定でしたが、予定を変更してOpenIEの未解決問題について紹介することにします。 2018年に発表された論文「A Survey on Open Information Extraction」では、OpenIEには以下の未解決問題があると主張していま…

テキストの構造化を支える技術 -パターンマッチで始める情報抽出-

前回の記事「テキストの構造化を支える技術 -概要編-」では、OpenIEの記念碑的なシステムであるTextRunnerを紹介しました。第2回目である今回は、シンプルながら強力なReVerbと呼ばれるシステムを紹介します。 記事の構成としては、最初にTextRunnerの課題に…

テキストの構造化を支える技術 -概要編-

最近、情報抽出、特にOpen Information Extraction(OpenIE)という分野について勉強しています。せっかく勉強しているので、学んだ内容について何回かに分けて紹介していこうと思います。第一回目の今回は、OpenIEという分野の概要について紹介し、OpenIEの…

固有表現認識器に言語モデルを組み込んで、性能を向上させる

最近の自然言語処理では言語モデルを使って転移学習をしたり、性能向上に役立てたりするようになってきました。言語モデルの1つであるELMoでは、言語モデルから得られる分散表現を他のタスクの入力に使うことで、質問応答や固有表現認識、評価分析といった…

教師なしで作る評価分析器

評価分析は自然言語処理の基礎技術でありながら実世界に広く応用されている技術です。たとえば、顧客の声を拾うために商品レビューを評価分析して肯定的なのか否定的なのか判断するのに使われています。また、情報抽出の技術と組み合わせて、文書のどの部分…

文字ベース言語モデルの作り方

最近の言語処理では言語モデルを使って転移学習をしたり、性能向上に役立てたりするようになってきました。言語モデルの1つであるELMoでは、言語モデルから得られる分散表現を他のタスクの入力に使うことで、質問応答や固有表現認識、評価分析といった様々…

リアルタイム固有表現認識

固有表現認識器にanaGo、フロントエンドにVue.js、バックエンドにFlaskを使ってリアルタイムに固有表現認識をしてみた。 anaGo Demo github.com

KerasにおけるSpatialDropoutとは何者なのか?

SpatialDropoutは、画像認識の分野でTompsonらによって提案されたドロップアウト方法です。通常のドロップアウトが各要素を独立して落とすのに対して、SpatialDropoutはある領域全体をまるごと落とします。それにより、画像認識の分野で性能向上が報告されて…

単語の順序を考慮しつつ文書を固定長で表現する

本日はACL 2017のベストペーパーの1つである以下の論文で用いられている文書表現の方法を紹介します。 A Local Detection Approach for Named Entity Recognition and Mention Detection この論文は、固有表現認識をFeedForward Neural Networkを使って文書…

ディープラーニングで作る固有表現認識器

固有表現認識は自然言語処理の基礎技術であり、様々なタスクの要素技術として使われます。たとえば、情報抽出や対話システム、質問応答といった応用システムの中で固有表現認識は使われることがあります。また、関係認識やEntity Linkingといった基礎技術で…

Tweetを定期的に取得してBigQueryに格納する

本記事ではTwitter Search APIを使ってTweetを取得し、結果をBigQueryに格納する方法について紹介します。データ分析のフローである「取得」「保存」「分析」「可視化」のうち、「取得」と「保存」までを行うことになります。

Pythonで日本語の文字分散表現を学習する

最近の自然言語処理では、文字レベルの言語処理が行われることがあります。 これら文字レベルの言語処理は、ユーザ生成コンテンツに有効であると言われています。 その理由として、ユーザ生成コンテンツのような崩れたテキストでは、形態素解析の性能が大幅…

Pythonで単語分散表現のクラスタリング

最近の自然言語処理では、単語の分散表現は当たり前のように使われています。 単語分散表現では、各単語が高次元ベクトル空間に配置され、加減乗除等の演算を行えるようになります。 これらのベクトルは、意味の近い単語に対しては同じようなベクトルになる…

Wikipediaのリンクを解析して同義語を抽出する

自然言語処理をする際、同義語を考慮したい時があります。 たとえば情報検索を例に挙げると、「car」と検索したときその同義語である「automobile」も検索にかかってくれると嬉しい場合があります。 同義語を獲得する方法は色々考えられますが、本記事では、…

Wikipedia内ページランクを計算して、重要なページを抽出する

自然言語処理をする際、データソースとして Wikipedia を使用することがあります。 Wikipedia を使う際、ページによっては内容が薄いので、ページを選択することがあります。 そのための方法として、Wikipedia 内のページランクを計算して、重要ページを抽出…

日本語版text8コーパスを作って分散表現を学習する

単語の分散表現を学習させる際、Wikipedia ほどのサイズが必要ないときに使われるコーパスとして text8 があります。 text8 は、Wikipedia に対してクリーニング等の処理をした後、100MB分切り出して作成されています。 text8 は前処理済みで簡単に使えるの…

Python で DBpedia から情報抽出する

自然言語処理では、ナレッジベース(knowledge base)を使う場合があります。 その際、手軽に使えるナレッジベースとして DBpedia があります。 DBpedia は Web 上でクエリ(SPARQL)を実行できるのですが、利便性を考えるとプログラムからクエリを実行した…

gensimを使ってKerasのEmbedding層を取得する

2017/06/21にリリースされた gensim 2.2.0 から Keras との統合機能が導入されました。 具体的には、Word2vec の Keras 用ラッパが導入されました。 これにより、gensim で分散表現を学習した後に、その重みを初期値として設定した Keras の Embedding層を取…