fastchat-t5-3b-v1.0 дает усеченные/неполные ответы
Я использовал следующие вложения:
- преобразователи предложений/all-mpnet-base-v2
- hkunlp/инструктор-xl
чтобы получить встраивание
def getEmbedding():
device = "cuda" if torch.cuda.is_available() else "cpu"
return HuggingFaceEmbeddings(model_name="sentence-transformers/all-mpnet-base-v2", model_kwargs={"device": device})
и попробовал со следующими LLM:
- lmsys/фастчат-t5-3b-v1.0
- Google/flan-t5-base
чтобы получить степень магистра права
def getLLM():
return pipeline(
task="text2text-generation",
model = "lmsys/fastchat-t5-3b-v1.0",
min_new_tokens=100,
max_new_tokens=256,
model_kwargs={"device_map": "auto", "load_in_8bit": False, "max_length": 512, "temperature": 0.}
)
# to get the text
def get_pdf_text(pdf_path):
text = ""
documents = []
for pdf in pdf_path:
with NamedTemporaryFile(delete=False, suffix='.pdf') as tmp:
shutil.copyfileobj(pdf, tmp)
tmp_path = Path(tmp.name)
#print(tmp_path)
loader = PyPDFLoader(str(tmp_path))
documents.extend(loader.load())
return documents
# to split the document which we have gotten from the pdfs into tokens
def get_text_chunks(documents):
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
text_splitter = TokenTextSplitter(chunk_size=100, chunk_overlap=10) # This the encoding for text-embedding-ada-002
texts = text_splitter.split_documents(texts)
return texts
# Creating Chroma vector DB and persisting it
def vector_db_pdf(pdf_path):
#if PDF is not present then load from persist directory else condition otherwise use pdf to generate persist vector DB
if len(pdf_path)>0:
documents=get_pdf_text(pdf_path)
texts =get_text_chunks(documents)
vector_db=Chroma.from_documents(documents=texts, embedding=getEmbedding(), persist_directory="storage")
vector_db.persist()
else:
#Use from persist
vector_db=Chroma(persist_directory="storage", embedding_function=getEmbedding())
return vector_db
def retreival_qa_chain():
llm=getLLM()
vectordb=vector_db_pdf([])
hf_llm = HuggingFacePipeline(pipeline=llm,model_id="lmsys/fastchat-t5-3b-v1.0")
qa = RetrievalQA.from_chain_type(llm=hf_llm, chain_type="stuff",retriever=retriever)
retriever = vectordb.as_retriever(search_kwargs={"k":3})
Некоторая дополнительная информация:
Входные данные: юридический файл, содержащий 8-10 страниц, Transformers==4.29.2, Offer-Transformers==2.2.2, Lang Chain= 0.0.189, Huggingface-hub==0.14.1.
Я прошел обучение LLM на своем PDF-файле и теперь задаю связанные с ним вопросы. Но генерируемый вывод всегда обрезается и останавливается между ними. Модель, дающая неполные предложения.
В конвейере LLM я пробовал такие параметры, какearly_stopping=False
параметрmin_new tokens
и увеличениеmax_new_tokens
но, похоже, ничего не работает. как эти параметры влияют на длину вывода?