paddlenlp taskflow
时间: 2023-04-24 08:01:21 浏览: 83
PaddleNLP Taskflow 是一个基于 PaddlePaddle 深度学习框架的任务流程编排工具,可以帮助用户快速构建和部署自然语言处理任务。它提供了一系列预定义的任务流程模板,包括文本分类、情感分析、命名实体识别等,用户可以根据自己的需求进行定制和扩展。同时,Taskflow 还支持多种数据源和模型,可以灵活地适应不同的场景和数据。
相关问题
用python写一个基于paddleNLP taskflow来提取的PDF文档信息的窗口程序
很抱歉,作为语言模型,我无法提供窗口程序编写方面的支持。不过我可以给你提供一些基于PaddleNLP的taskflow实现的代码来提取PDF文档信息,供你参考。
```python
import paddle
import paddle.nn as nn
from paddle.static import InputSpec
from paddlenlp.datasets import load_dataset
from paddlenlp.data import Stack, Tuple, Pad
from paddlenlp.transformers import BertModel, BertForTokenClassification
from paddlenlp.metrics import ChunkEvaluator
from paddlenlp.utils.log import logger
from paddle.io import DataLoader
from typing import List, Tuple
import os
import fitz
import re
import tkinter as tk
from tkinter import filedialog
paddle.set_device('cpu')
class PDFReader:
def __init__(self):
self.model = None
self.label_map = {
0: 'O',
1: 'B-NAME',
2: 'I-NAME',
3: 'B-ADDRESS',
4: 'I-ADDRESS',
5: 'B-PHONE',
6: 'I-PHONE',
7: 'B-EMAIL',
8: 'I-EMAIL',
9: 'B-ORGANIZATION',
10: 'I-ORGANIZATION'
}
self.rev_label_map = {v: k for k, v in self.label_map.items()}
def load_model(self, model_path: str):
self.model = BertForTokenClassification.from_pretrained(
model_path, num_classes=len(self.label_map), dropout=None)
def extract_info(self, pdf_path: str) -> List[Tuple[str, str]]:
assert self.model is not None, "Please load model first"
doc = fitz.open(pdf_path)
info_list = []
for page in doc:
text = page.get_text()
text = re.sub('\s+', ' ', text)
tokens = []
for char in text:
tokens.append(char)
labels = self.predict(tokens)
entities = self.extract_entities(tokens, labels)
info_list.extend(entities)
return info_list
def predict(self, tokens: List[str]) -> List[int]:
self.model.eval()
encoded_inputs = self.model.tokenizer(
tokens, return_length=True, is_split_into_words=True)
input_ids = paddle.to_tensor(encoded_inputs['input_ids'])
token_type_ids = paddle.to_tensor(encoded_inputs['token_type_ids'])
seq_len = paddle.to_tensor(encoded_inputs['seq_len'])
logits = self.model(input_ids, token_type_ids, seq_len)
preds = paddle.argmax(logits, axis=-1)
return preds.numpy().tolist()[0]
def extract_entities(self, tokens: List[str], labels: List[int]) -> List[Tuple[str, str]]:
entities = []
entity_type = None
entity_value = ""
for i, label in enumerate(labels):
if label == self.rev_label_map['O']:
if entity_type is not None and entity_value != "":
entities.append((entity_type, entity_value))
entity_type = None
entity_value = ""
else:
if entity_type is None:
entity_type = self.label_map[label].split('-')[1]
entity_value += tokens[i]
else:
if self.label_map[label].split('-')[1] == entity_type:
entity_value += tokens[i]
else:
entities.append((entity_type, entity_value))
entity_type = self.label_map[label].split('-')[1]
entity_value = tokens[i]
if entity_type is not None and entity_value != "":
entities.append((entity_type, entity_value))
return entities
class PDFReaderWindow:
def __init__(self):
self.reader = PDFReader()
self.reader.load_model("path/to/model")
self.window = tk.Tk()
self.window.title("PDF Reader")
self.window.geometry("400x400")
self.pdf_path_label = tk.Label(self.window, text="PDF Path:")
self.pdf_path_label.pack()
self.pdf_path_entry = tk.Entry(self.window, width=50)
self.pdf_path_entry.pack()
self.choose_pdf_button = tk.Button(
self.window, text="Choose PDF", command=self.choose_pdf)
self.choose_pdf_button.pack()
self.extract_info_button = tk.Button(
self.window, text="Extract Info", command=self.extract_info)
self.extract_info_button.pack()
self.info_text = tk.Text(self.window, height=20)
self.info_text.pack()
def choose_pdf(self):
pdf_path = filedialog.askopenfilename(
title="Choose PDF", filetypes=(("PDF Files", "*.pdf"),))
self.pdf_path_entry.delete(0, tk.END)
self.pdf_path_entry.insert(0, pdf_path)
def extract_info(self):
pdf_path = self.pdf_path_entry.get()
info_list = self.reader.extract_info(pdf_path)
self.info_text.delete('1.0', tk.END)
for info in info_list:
self.info_text.insert(tk.END, f"{info[0]}: {info[1]}\n")
def run(self):
self.window.mainloop()
if __name__ == '__main__':
window = PDFReaderWindow()
window.run()
```
这个程序实现了一个简单的窗口应用程序,用户可以选择一个PDF文件,并点击按钮提取其中的信息。程序使用了PaddleNLP中的一个预训练模型来做实体识别。
paddle taskflow 做句向量相似度
您好!使用PaddlePaddle的Taskflow模块进行句向量相似度计算的步骤如下:
首先,您需要安装PaddlePaddle和Taskflow模块。可以使用以下命令安装Taskflow:
```
pip install paddlepaddle-taskflow
```
接下来,您可以使用PaddleNLP提供的预训练模型快速获取句子的向量表示。PaddleNLP提供了多个预训练模型,如ERNIE、BERT等。这里以ERNIE预训练模型为例。
首先,导入所需的库:
```python
import paddle
from paddlenlp.transformers import ErnieTokenizer, ErnieModel
```
然后,加载预训练模型和tokenizer:
```python
model_name = "ernie-1.0"
tokenizer = ErnieTokenizer.from_pretrained(model_name)
model = ErnieModel.from_pretrained(model_name)
```
接下来,编写一个函数来计算句子的向量表示:
```python
def get_sentence_embedding(sentence):
input_ids = tokenizer(sentence)["input_ids"]
input_ids = paddle.to_tensor([input_ids])
_, sentence_embedding = model(input_ids)
return sentence_embedding.numpy()
```
使用这个函数可以得到句子的向量表示。
最后,计算两个句子的相似度可以使用余弦相似度或其他相似度度量方法:
```python
import numpy as np
from scipy.spatial.distance import cosine
def sentence_similarity(sentence1, sentence2):
embedding1 = get_sentence_embedding(sentence1)
embedding2 = get_sentence_embedding(sentence2)
similarity = 1 - cosine(embedding1, embedding2)
return similarity
```
通过调用`sentence_similarity`函数,可以计算两个句子的相似度。
希望以上内容能对您有所帮助!如有任何疑问,请随时提问。