Hugging Face Transformers Pipeline
Hugging face TransformersのPipelineを使うと、わずか数行のコードでNLPのタスクを実行することができます。
Pipelineでは、生のテキストデータを受け取ったときに内部的に次の3つのステップが実行されます。
- Tokenizer: モデルへの入力形式に変換するための前処理が実行される
- Model: 変換された入力テキストがモデルへ入力される
- Post Processing: モデルの推論結果が扱いやすい形に後処理されて出力される
Pipeline の使い方
次のコマンドでHugging Face Transformersをインストールします。
$ pip install transformers
pipeline("question-answering")
のように、行いたいタスク名をpipeline
に指定します。タスクは例えば次のようなものがあります。
- feature-extraction (get the vector representation of a text)
- fill-mask
- ner (named entity recognition)
- question-answering
- sentiment-analysis
- summarization
- text-generation
- translation
- zero-shot-classification
詳細は次のリンクから確認することができます。
例えば、テキスト分類を行いたいときは次のように記述します。
from transformers import pipeline
pipe = pipeline("text-classification")
pipe("This restaurant is awesome")
次の結果が返ってきます。
[{'label': 'POSITIVE', 'score': 0.9998743534088135}]
Hub から特定のモデルを使用したい場合、Hub上のモデルがすでにそのタスクを定義しているときに限り、タスク名を省略することができます。
from transformers import pipeline
pipe = pipeline(model="roberta-large-mnli")
pipe("This restaurant is awesome")
>> [{'label': 'NEUTRAL', 'score': 0.7313136458396912}]
入力にリストを渡すことも可能です。
from transformers import pipeline
pipe = pipeline("text-classification")
pipe(["This restaurant is awesome", "This restaurant is awful"])
>> [{'label': 'POSITIVE', 'score': 0.9998743534088135},
>> {'label': 'NEGATIVE', 'score': 0.9996669292449951}]
カスタムのPipelineを定義することも可能です。
class MyPipeline(TextClassificationPipeline):
def postprocess():
# Your code goes here
scores = scores * 100
# And here
my_pipeline = MyPipeline(model=model, tokenizer=tokenizer, ...)
# or if you use *pipeline* function, then:
my_pipeline = pipeline(model="xxxx", pipeline_class=MyPipeline)
Pipeline の例
次のNLPタスクの例を紹介します。
- Zero-shot classification
- Text generation
- Mask filling
Zero-shot classification
Zero-shot classificationは、ラベリングされたテキストを用意することなく、分類したいラベルをPipelineに直接与えるだけで、そのラベルに対する推論結果を返すというタスクです。テキストにアノテーションを付けるのは通常時間がかかり、専門知識が必要になります。このような場合にZero-shot classificationは有効です。
from transformers import pipeline
classifier = pipeline("zero-shot-classification")
classifier(
"This is a course about the Transformers library",
candidate_labels=["education", "politics", "business"],
)
{'sequence': 'This is a course about the Transformers library',
'labels': ['education', 'business', 'politics'],
'scores': [0.8445988297462463, 0.11197440326213837, 0.04342682659626007]}
Text generation
Text generationは、プロンプトを与えるとモデルが残りのテキストを生成してそれをオートコンプリートするタスクです。
from transformers import pipeline
generator = pipeline("text-generation")
generator("In this course, we will teach you how to")
[{'generated_text': 'In this course, we will teach you how to understand and use '
'data flow and data interchange when handling user data. We '
'will be working with one or more of the most commonly used '
'data flows — data flows of various types, as seen by the '
'HTTP'}]
Hubから特定のモデルを選択することも可能です。
from transformers import pipeline
generator = pipeline("text-generation", model="distilgpt2")
generator(
"In this course, we will teach you how to",
max_length=30,
num_return_sequences=2,
)
[{'generated_text': 'In this course, we will teach you how to manipulate the world and '
'move your mental and physical capabilities to your advantage.'},
{'generated_text': 'In this course, we will teach you how to become an expert and '
'practice realtime, and with a hands on experience on both real '
'time and real'}]
Mask filling
Mask fillingは、与えられたテキストの空白を埋めるタスクです。
from transformers import pipeline
unmasker = pipeline("fill-mask")
unmasker("This course will teach you all about <mask> models.", top_k=2)
[{'sequence': 'This course will teach you all about mathematical models.',
'score': 0.19619831442832947,
'token': 30412,
'token_str': ' mathematical'},
{'sequence': 'This course will teach you all about computational models.',
'score': 0.04052725434303284,
'token': 38163,
'token_str': ' computational'}]
参考
AlloyDB
Amazon Cognito
Amazon EC2
Amazon ECS
Amazon QuickSight
Amazon RDS
Amazon Redshift
Amazon S3
API
Autonomous Vehicle
AWS
AWS API Gateway
AWS Chalice
AWS Control Tower
AWS IAM
AWS Lambda
AWS VPC
BERT
BigQuery
Causal Inference
ChatGPT
Chrome Extension
CircleCI
Classification
Cloud Functions
Cloud IAM
Cloud Run
Cloud Storage
Clustering
CSS
Data Engineering
Data Modeling
Database
dbt
Decision Tree
Deep Learning
Descriptive Statistics
Differential Equation
Dimensionality Reduction
Discrete Choice Model
Docker
Economics
FastAPI
Firebase
GIS
git
GitHub
GitHub Actions
Google
Google Cloud
Google Search Console
Hugging Face
Hypothesis Testing
Inferential Statistics
Interval Estimation
JavaScript
Jinja
Kedro
Kubernetes
LightGBM
Linux
LLM
Mac
Machine Learning
Macroeconomics
Marketing
Mathematical Model
Meltano
MLflow
MLOps
MySQL
NextJS
NLP
Nodejs
NoSQL
ONNX
OpenAI
Optimization Problem
Optuna
Pandas
Pinecone
PostGIS
PostgreSQL
Probability Distribution
Product
Project
Psychology
Python
PyTorch
QGIS
R
ReactJS
Regression
Rideshare
SEO
Singer
sklearn
Slack
Snowflake
Software Development
SQL
Statistical Model
Statistics
Streamlit
Tabular
Tailwind CSS
TensorFlow
Terraform
Transportation
TypeScript
Urban Planning
Vector Database
Vertex AI
VSCode
XGBoost