Ahogrammer

Deep Dive Into NLP, ML and Cloud

SageMaker Processingでカスタムイメージを使ってデータを加工する

SageMaker Processingは、データの前処理や後処理、特徴エンジニアリング、モデルの評価といった機械学習のワークロードをSageMaker上で実行するための機能です。SageMaker Processingを使うことで、これらの処理をするためのジョブをコンテナ上で実行するこ…

benchmark関数を使ってデータセットの処理時間の計測と改善に取り組む

TensorFlowには、tf.data.Dataset APIという入力のパイプラインを実現するための強力な機能があります。入力のパイプラインを最適化することで学習全体を高速化できるため、定量的に計測して改善する価値があります。そこで、本記事ではTensorFlow Datasets…

Wikipediaの前処理はもうやめて「Wiki-40B」を使う

最近の自然言語処理では、大規模なテキストから単語の分散表現や言語モデルを学習させて使っています。学習する際のテキストとしては、分量や利用しやすさの都合からWikipediaが選ばれることが多いですが、その前処理は意外と面倒で時間のかかる作業です。そ…

【TensorFlow】StringLookupの使い方

以下のTweetで紹介したTensorFlow Recommendersのコードを見ていたら、StringLookupクラスという見慣れぬクラスを使っていました。あまり紹介している記事を見たことがないので、Tipsとしてどのようなものか紹介します。 TensorFlowで推薦システムを構築する…

GiNZAで解析した依存構造を文節単位で可視化する

自然言語処理において、依存構造解析は多くのアプリケーションに役立つ重要な技術の1つでしょう。たとえば、テキストからさまざまな情報を抽出するシステムやアスペクトベースの評判解析、含意関係認識といった幅広いタスクで役立ちます。日本語で依存構造を…

Universal Sentence Encoderをチューニングして多言語のテキスト分類

「Googleが開発した多言語の埋め込みモデル「LaBSE」を使って多言語のテキスト分類」と題した記事を書いたところ、「Universal Sentence Encoder(以下、USE)と比べてどうなのか?」というコメントを見かけました。そこで、本記事では、多言語の埋め込み表…

Googleが開発した多言語の埋め込みモデル「LaBSE」を使って多言語のテキスト分類

自然言語処理において、テキストをその意味を考慮しつつ固定長のベクトルに変換する埋め込みモデルは重要です。文の意味をよく表現したベクトルを作ることができれば、テキスト分類や情報検索、文類似度など、さまざまなタスクで役立ちます。本記事では、Goo…

Lambdaレイヤーを公開するためのシェルスクリプト

AWS

最近、AWS Lambdaをよく使っているが、その機能の一つとしてLambdaレイヤーがある。レイヤーにパッケージを取り込むことで、複数のLambda関数から使用可能になる。ビジネスロジックを共通化する、ビルドの手間を省く等の恩恵があるが、私的にはデプロイする…

質問応答におけるパッセージ検索 BERT vs BM25

最近、文章を書く機会が少なくなっているので、リハビリがてら以下の論文を紹介しよう。 Investigating the Successes and Failures of BERT for Passage Re-Ranking この論文は、BERTによるパッセージ検索がBM25と比べて、どのような状況で強いのか分析して…

AWS LambdaにGiNZAを載せて、固有表現認識APIを作成する

一週間ほど前、AWS LambdaにElastic File System(EFS)をマウントできる機能が追加されました。この機能を使うことで、マウントしたEFS上への読み書きがLambda関数からできるようになりました。これまではLambdaの制限により、/tmpで使用可能な容量が512MB…

Transformersの事前学習済みモデルをダウンロードして保存する

先日、Transformersの事前学習済みモデルをダウンロードして保存する必要があったのでその方法を紹介。 結論として、モデルのダウンロードはおなじみのfrom_pretrainedで行い、保存はsave_pretrainedで行う。 ちなみに、これをしたかった理由は、モデルをS3…

Python 3.7向けにSageMaker PyTorch Containerをビルドする

先日、Flairを使ったモデルを構築し、SageMakerのトレーニングジョブに投げたところモデルの保存で躓いた。原因を調べたところ、pickleでダンプしようとしていたオブジェクトの中に、Python 3.6ではダンプできないオブジェクトがあるようだった。そこで、Sag…

はじめての出版、地獄秘話

先月2月27日に、書籍『機械学習・深層学習による自然言語処理入門』を発売させていただきました。タイミングを逃して、Twitterやブログで告知することもなかったのですが、気持ちを整理するために、本記事では出版の経緯からまとめてみます。キラキラした感…

BERTで日本語の含意関係認識をする

含意関係認識(Recognizing Textual Entailment: RTE)とは、2つの文1と文2が与えられたときに、文1が正しいとしたら文2も正しいか否かを判定するタスクのことです。たとえば、文1として「太郎は人間だ。」という文があるとします。この文が正しいとしたとき…

教師あり学習を使ってオープンドメインのテキストから情報抽出する手法

オープンドメインの情報抽出は、この10年ほどで盛んになってきた自然言語処理の一分野でOpenIE(Open Information Extraction)と呼ばれている。OpenIEでは、ドメインを限定しないテキストからタプルを抽出する。たとえば、「ホンダは本田宗一郎によって創業…

単語分散表現の信頼性を考慮した固有表現認識

ACL 2019より以下の論文を紹介。 Reliability-aware Dynamic Feature Composition for Name Tagging この論文では、単語分散表現の信頼性を考慮した固有表現認識を行うモデルを提案している。単語分散表現は広く使われているが、低頻度語や未知語のように文…

辞書を用いてテキストから病名を抽出する

医療分野の自然言語処理で基本となるタスクの一つにテキストからの病名の抽出があります。テキストから病名を抽出できると、たとえば、SNSのテキストから病気の流行を予測したり、広告技術と組み合わせて受診や薬の購入を促したり、対話システムと組み合わせ…

検索エンジンにBERTを組み合わせて検索性能を向上させる手法

SIGIR 2019より以下の論文を紹介。NLP2019でも発表されており、わかりやすいスライド付き。 FAQ Retrieval using Query-Question Similarity and BERT-Based Query-Answer Relevance 【論文】行政対話システムにおける検索エンジンTSUBAKIとBERTを併用したFA…

生体医療分野における自然言語処理の10種競技

ACL 2019より以下の論文を紹介。 Transfer Learning in Biomedical Natural Language Processing: An Evaluation of BERT and ELMo on Ten Benchmarking Datasets この論文では、生体医療分野の自然言語処理におけるベンチマークの提案とベンチマークに対す…

生体医療分野のテキストのためのアノテーションツール

EMNLP 2019より以下の論文を紹介。 MedCATTrainer: A Biomedical Free Text Annotation Interface with Active Learning and Research Use Case Specific Customisation この論文では、MedCatTrainerと呼ばれる生体医療分野のテキストに対する固有表現認識と…

ElasticsearchとBERTを組み合わせて類似文書検索

本記事ではElasticsearchとBERTを組み合わせて類似文書検索を行う方法について紹介します。Elasticsearchでは最近、ベクトルに対する類似文書検索の機能が実装されました。一方、BERTを使うことでテキストを固定長のベクトルに変換することができます。つま…

日本語の電子健康記録のテキストを匿名化する手法

EMNLP 2018より以下の論文を紹介。 De-identifying Free Text of Japanese Dummy Electronic Health Records この論文では、日本語の電子健康記録(EHRs: Electronic Health Records)のテキストを匿名化する手法を提案している。近年、医療関連のデータが増加…

Tweetから薬の副作用に関する分類と抽出を行う手法

ACL 2019より以下の論文を紹介。 HITSZ-ICRC: A Report for SMM4H Shared Task 2019-Automatic Classification and Extraction of Adverse Effect Mentions in Tweets この論文は、Tweet中に出現する薬の副作用に関するメンションの分類と抽出を行う手法を提…

ユーザ生成型医療テキストのスペル修正

ACL 2019より以下の論文を紹介。 Lexical Normalization of User-Generated Medical Text この論文では、ユーザ生成型の医療テキストに対するスペル修正を行う手法を提案している。ユーザ生成型の医療テキストとは、たとえばTwitterでつぶやかれた健康情報や…

個人の健康に関するTweetか否かの分類を行う手法

ACL 2019より以下の論文を紹介。 Figurative Usage Detection of Symptom Words to Improve Personal Health Mention Detection この論文では、与えられた文が個人の健康状態に関する言及(PHM: Personal Health Mention)を含むか否かを分類する手法を提案…

固有表現認識と品詞タグ付けに対するドメイン適応を教師なしで行う

EMNLP 2019より以下の論文を紹介。 Unsupervised Domain Adaptation of Contextualized Embeddings for Sequence Labeling この論文は、系列ラベリングのドメイン適応を教師なしで行う手法を提案している。ELMoやBERTなど文脈を考慮した分散表現を生成するモ…

BERTを使った系列ラベリングの高速化

EMNLP 2019より以下の論文を紹介。 Small and Practical BERT Models for Sequence Labeling この論文では、系列ラベリングタスクに対するBERTの高速化と多言語転移性能の検証を行っている。BERTが良い性能を出すことはわかっているが、モデルのサイズが大き…

固有表現認識のデータセットをWikipediaから自動作成する手法

ACL 2017より以下の論文を紹介。 Cross-lingual Name Tagging and Linking for 282 Languages 先日、以下の記事の中で、サブワードを使って固有表現認識を行う際にどのサブワードの分散表現を使うのが良いのか検証した論文を紹介した。今日紹介する論文はそ…

固有表現認識にはどのサブワードの分散表現が有効なのか?

ACL 2019より以下の論文を紹介。 Sequence Tagging with Contextual and Non-Contextual Subword Representations: A Multilingual Evaluation この論文では、2つの系列ラベリングタスク(固有表現認識と品詞タグ付け)に対して、3つのサブワードの分散表現…

TensorFlow Textを使ってテキストのトークン化をする

自然言語処理で欠かせない処理にテキストのトークン化があります。テキストをトークン化することで、その後のボキャブラリの構築やID化の処理を行うことができるようになります。本記事では、トークン化をTensorFlow Textの機能を使って実現する方法について…