Wissen Sie wirklich, wie man Prompt schreibt? Referenzauflösung in RAG-Anwendungen analysieren

Mit der kontinuierlichen Entwicklung großer Sprachmodelle (LLM) wie ChatGPT widmen sich immer mehr Forscher der Anwendung von Sprachmodellen.

Unter diesen ist Retrieval-Augmented Generation (RAG) eine Generierungsmethode für wissensintensive NLP-Aufgaben. Sie ruft relevante Informationen aus bekannten Wissensdatenbanken ab, indem sie eine Abrufkomponente in den Generierungsprozess einführt, und kombiniert diese Die Informationen werden mit den Generierungsfunktionen kombiniert von LLM und verbessert dadurch die Genauigkeit und Zuverlässigkeit der Erzeugung. Mit dieser Methode können verschiedene wissensintensive NLP-Aufgaben implementiert werden, wie z. B. Frage und Antwort, abstrakte Generierung, semantisches Denken usw.

Dieser Artikel beginnt mit der Lösung eines spezifischen Problems bei der Optimierung des RAG-Systems und analysiert das traditionelle NLP-Problem, indem er die Methode zur Verwendung von LLM Prompt Engineering zeigt.

01. Vorläufige Lösungsfindung

Das Open-Source-Projekt Akcio ist ein vollständiges RAG-Frage- und Antwortsystem. Benutzer können durch den Import verschiedener privater Fachkenntnisse ein Frage- und Antwortsystem in Berufsfeldern aufbauen.

|Akcios Architekturdiagramm. Bei Fachwissen handelt es sich um verschiedene Arten von Dokumenten, die über DataLoader in den Store importiert werden. Nachdem jede Frage gestellt wurde, kann LLM das Rückrufwissen und die LLM-eigenen Fähigkeiten zur Erzeugung natürlicher Sprache kombinieren, um die entsprechende Antwort zu geben.

Wenn wir beispielsweise einen Artikel mit dem Titel „2023 Large Model Implementation Progress Trend Insight Report“ in Akcio importieren, können wir ihm in diesem Bericht Fragen stellen, wie zum Beispiel:

2023年,大模型行业的应用场景可以分为哪几类?

Durch einige Rückrufstrategien wurden die drei ursprünglichen Textausschnitte im „Bericht“, die für das Problem am relevantesten waren, aus dem Store zurückgerufen:

['在2023年,大模型行业的应用场景可分为生成和决策两类应用场景,决策场景预期业务值更高。',
'大模型行业的生成场景主要有对话交互,代码开发,智能体等。',
'NLP的应用场景有文本分类,机器翻译,情感分析,自动摘要等。']

Das nützlichste Fragment ist natürlich das erste, aber das spielt keine Rolle. Akcio verwendet alle drei als Kontext, um LLM zu fragen, zum Beispiel fragt es so:

请根据下面知识回答问题:

知识:

在2023年,大模型行业的应用场景可分为生成和决策两类应用场景,决策场景预期业务值更高。
大模型行业的生成场景主要有对话交互,代码开发,智能体等。
NLP的应用场景有文本分类,机器翻译,情感分析,自动摘要等。

问题:

2023年,大模型行业的应用场景可以分为哪几类?

LLM kann eine vernünftige Antwort geben:

大模型行业的应用场景可以分为生成和决策两类应用场景。

In diesem Fall ist der gesamte Link geöffnet. Diese Architekturlogik scheint nicht kompliziert zu sein, aber wenn Sie sich mit dem Entwicklungsprozess befassen, werden Sie feststellen, dass es einige Schwierigkeiten gibt, die gelöst werden müssen.

Bei mehreren Dialogrunden muss beispielsweise ein Problem gelöst werden: Wenn die letzte Fragerunde einige Pronomen enthält, die sich auf das oben Genannte beziehen, kann es sein, dass falsches Wissen abgerufen wird, wenn diese Frage direkt zum Abrufen verwendet wird . Zum Beispiel:

问1: 2023年,大模型行业的应用场景可以分为哪几类?
答1: 大模型行业的应用场景可以分为生成和决策两类应用场景。
问2: 它们有什么区别,能举例说明吗?

Das „sie“ bezieht sich hier offensichtlich auf „die beiden Arten von Anwendungsszenarien: Generierung und Entscheidungsfindung.“ Die ursprüngliche Bedeutung der Frage lautet: „Was ist der Unterschied zwischen Generierungs- und Entscheidungsszenarien? Können Sie ein Beispiel nennen?“ Wenn Sie jedoch direkt die Frage „Was ist der Unterschied zwischen ihnen? Können Sie ein Beispiel nennen?“ verwenden, um sich zu erinnern, ist es sehr wahrscheinlich, dass Sie sich an ein Wissensfragment wie dieses erinnern:

['BERT和GPT都是NLP领域的重要模型,但它们的设计和应用场景有很大的区别。',
'大模型和小模型的区别在于其规模和复杂度。大模型通常具有更多的参数和更复杂的结构,需要更多的计算资源和时间来训练和推理。而小模型则相对简单,参数较少,训练和推理速度较快。',
'但没有更多的信息来区分这两个产品,因为它们看起来非常相似。']

Offensichtlich ist das Thema falsch, daher ist es definitiv falsch, das zurückgerufene Wissen zu verwenden. LLM muss dem Benutzer keine gute Antwort geben, indem es dieses nutzlose Wissen verwendet.

Was ist also ein guter Weg, dieses Problem zu lösen?

Das erste, was mir in den Sinn kommt, ist eine häufige Aufgabe im Bereich NLP: Referenzauflösung. Die Referenzauflösung ist eine wichtige Aufgabe in der Verarbeitung natürlicher Sprache (NLP), mit der Wörter in einem Text ermittelt werden, die sich auf dieselbe Entität beziehen. Die Aufgabe zielt darauf ab, Pronomen, Nominalphrasen usw. zu identifizieren und sie mit zuvor genannten Entitäten zu verknüpfen. Beispielsweise würde die Koreferenzauflösung im Satz „Johannes sah Maria. Er winkte ihr zu“ „Er“ und „Johannes“ sowie „sie“ und „Maria“ als dieselbe Entität klassifizieren.

Vielleicht kann uns diese Aufgabe helfen, dieses Problem zu lösen, aber nach dem Üben haben wir festgestellt, dass das aktuelle Open-Source-Modell, sei es durch Spacy oder Huggingface, gewisse Einschränkungen bei der Verarbeitung der Aufgabe der Anaphora-Auflösung aufweist und nur relativ einfache Szenarien bewältigen kann. wie zum Beispiel :

问1:大模型是什么?
问2:它有什么用?

Es kann festgestellt werden, dass sich „es“ auf „großes Modell“ bezieht. Komplexe Bezüge können jedoch nicht erkannt werden, wie zum Beispiel:

问1:GPT3是什么?
问2:GPT4又是什么时候发布的?
问3:二者有什么区别?后者有什么优势?

Es ist unmöglich zu erkennen, dass sich „beide“ auf GPT3 und GPT4 bezieht und „letzteres“ sich auf „GPT4“ bezieht. Ein anderes Beispiel:

问1:GPT4又是什么时候发布的?
答1:GPT4是在 2023 年发布的
问2:这一年在计算机视觉有什么进展?

Es ist nicht zu erkennen, dass sich „dieses Jahr“ auf „2023“ bezieht.

Mit anderen Worten, die bestehenden kleinen NLP-Modelle können nur die Erkennung einfacher Pronomen wie „it“, „he“, „she“, „this“ usw. bewältigen, können jedoch komplexe referentielle Aussagen nicht erkennen und verarbeiten.

Was sollen wir also tun? Für komplexe Sprachszenarien ist die Verwendung großer Modelle vielleicht der beste Weg, damit umzugehen. Denn als ChatGPT populär war, galt es schließlich als die ultimative Waffe, die „NLP nicht mehr existiert“. Wir können also versuchen, LLM diese Referenzauflösungsaufgabe übernehmen zu lassen.

02.Verwenden Sie ChatGPT zur Referenzauflösung

Wir versuchen, für diese Aufgabe das kostengünstige und benutzerfreundliche ChatGPT zu verwenden. Der Schlüssel hier liegt tatsächlich darin, wie man Prompts schreibt, was oft als Prompt Engineering bezeichnet wird. Das ist eigentlich etwas, das einfach erscheint, aber eigentlich nicht einfach gut umzusetzen ist.

Beispielsweise haben wir zunächst einige einfache Eingabeaufforderungen vom Typ Befehl verwendet und versucht, ChatGPT die Pronomen in der neuesten Frage ersetzen zu lassen:

prompt = f'''Please return a new question with the following requirements:
1. If there are pronouns or conditions are missing in the question, please make a complete question according to the context.
2. If the question is complete, please keep the original question.

{history}
Question: {question}'''

Diese Eingabeaufforderung ist nicht kompliziert. Um eine Anfrage zu stellen, ersetzen Sie entweder das Pronomen oder lassen Sie die ursprüngliche Frage unverändert und geben Sie den historischen Kontext und die neueste Frage an GPT weiter, damit es uns bei der Erledigung dieser Aufgabe helfen kann. Lassen Sie uns einige Effekte testen (im Vergleich zu Chinesisch ist GPT in Englisch besser, daher testen wir direkt auf Englisch):

history = ''' What is NLP? 
NLP stands for Natural Language Processing. It is a field of computer science and artificial intelligence that focuses on the interaction between computers and humans using natural language. '''
question = 'What problem does it solve?'

Die Antwort von ChatGPT lautet:

What problem does Natural Language Processing (NLP) solve?

Es scheint ziemlich gut zu sein, es hat „es“ als „NLP“ erkannt und auch „Natural Language Processing (NLP)“ verwendet, um den vollständigen Namen zu ergänzen.

Versuchen wir es mit einem komplexeren Beispiel:

history = '''When was GPT4 released?
GPT4 was released in 2023'''
question = 'What progress has been made in computer vision this year?'

Die Rendite beträgt:

What progress has been made in computer vision this year?

GPT hat „dieses Jahr“ nicht erfolgreich ersetzt, in diesem Fall ist es gescheitert.

Versuchen Sie es mit einem anderen komplexen Beispiel:

history = '''What is GPT3?
GPT-3 (Generative Pre-trained Transformer 3) is a state-of-the-art language processing model developed by OpenAI.
When was GPT4 released?
GPT4 was released in 2023'''
question = 'What is the difference between the two? What are the advantages of the latter?'

Die Rendite beträgt:

Sorry, the information provided about GPT-4's release date is not accurate as it has not been officially announced by OpenAI. Therefore, it is not possible to answer the question about the difference between GPT-3 and GPT-4 or the advantages of the latter.

ChatGPT hat die Pronomen nicht wie gewünscht umgeschrieben, sondern direkt auf diese Frage geantwortet (das hier verwendete GPT3-Modell ist relativ früh und es gibt keine Informationen zu GPT4 in seinen Schulungsmaterialien, daher wurde geantwortet, dass es es nicht weiß).

In unseren nachfolgenden Tests haben wir festgestellt, dass ChatGPT mit einer gewissen Wahrscheinlichkeit die Frage direkt beantwortet, anstatt das Pronomen gemäß unserer Anfrageaufforderung umzuschreiben. Wir versuchen, der Eingabeaufforderung einige Anforderungen hinzuzufügen, damit die Frage nicht direkt beantwortet wird. Es besteht jedoch immer noch eine geringe Wahrscheinlichkeit, dass diese Frage angezeigt wird. Es scheint, dass nicht alle ChatGPT-Anforderungen verstanden werden können und manchmal leicht durch andere Informationen gestört werden.

Was sollen wir tun, wenn weder traditionelle kleine NLP-Modelle noch große Modelle wie ChatGPT dieses Problem lösen können? Vielleicht versuchen wir, unsere Eingabeaufforderungen aus einem anderen Blickwinkel zu optimieren, um ChatGPT gehorsamer zu machen.

03.Eingabeaufforderung für wenige Schüsse + CoT

Es gibt einige Techniken im Prompt Engineering, mit denen LLM Anweisungen besser verstehen und befolgen kann. Beispielsweise zeigen wir LLM ein paar weitere Referenzantworten und lassen es weiter antworten, indem wir unsere Referenzbeispiele nachahmen. Diese Methode des Few-Shot-Kontextlernens, das ist, Es erfordert keine Feinabstimmung des LLM-Modells und kann gute Ergebnisse liefern. Im Allgemeinen ist das LLM nach der Anzeige der LLM 5-Aufnahmen in der Lage, Ihrem Referenzfall zu folgen und mit der Beantwortung fortzufahren.

Ob jedoch ein Pronomenersatz erforderlich ist oder das ursprüngliche Problem beibehalten werden soll, ist eine relativ komplexe Frage des NLP-Verständnisses. Selbst ein LLM wie ChatGPT ist möglicherweise nicht in der Lage, anhand einiger Referenzbeispiele direkt die richtige Antwort zu geben. Glücklicherweise gibt es im Prompt Engineering eine gängige Methode, die es LLM ermöglicht, logische Probleme besser zu bewältigen, und das ist die Gedankenkette CoT.

„Das Konzept der Gedankenkette (CoT) wurde erstmals in Googles Artikel „Chain-of-Thought Prompting Elicits Reasoning in Large Language Models“ vorgeschlagen . Gedankenkette (CoT) ist eine verbesserte Aufforderungsstrategie, die zur Verbesserung eingesetzt wird Die Leistung von LLM bei komplexen Argumentationsaufgaben wie arithmetischem Denken, gesundem Menschenverstand und symbolischem Denken. Die allgemeine Idee besteht darin, LLM die Ableitung des Zwischenprozesses während des Antwortprozesses gemeinsam beantworten zu lassen und LLM nach und nach ableiten zu lassen Die endgültige Antwort. Das ist viel genauer, als LLM die endgültige Antwort direkt beantworten zu lassen.

Wenn wir daher nur wenige Beispiele nennen, können wir LLM auch eine Gedankenkette geben, das heißt, den Prozess des Denkens und Denkens sehen. Dies verbessert die Genauigkeit.

Basierend auf dieser Idee haben wir unsere letzte Eingabeaufforderung geschrieben:

REWRITE_TEMP = f'''
HISTORY:
[]
NOW QUESTION: Hello, how are you?
NEED COREFERENCE RESOLUTION: No => THOUGHT: So output question is the same as now question. => OUTPUT QUESTION: Hello, how are you?
-------------------
HISTORY:
[Q: Is Milvus a vector database?
A: Yes, Milvus is a vector database.]
NOW QUESTION: How to use it?
NEED COREFERENCE RESOLUTION: Yes => THOUGHT: I need to replace 'it' with 'Milvus' in now question. => OUTPUT QUESTION: How to use Milvus?
-------------------
HISTORY:
[]
NOW QUESTION: What is the features of it?
NEED COREFERENCE RESOLUTION: Yes => THOUGHT: I need to replace 'it' in now question, but I can't find a word in history to replace it, so the output question is the same as now question. => OUTPUT QUESTION: What is the features of it?
-------------------
HISTORY:
[Q: What is PyTorch?
A: PyTorch is an open-source machine learning library for Python. It provides a flexible and efficient framework for building and training deep neural networks. 
Q: What is Tensorflow?
A: TensorFlow is an open-source machine learning framework. It provides a comprehensive set of tools, libraries, and resources for building and deploying machine learning models.]
NOW QUESTION: What is the difference between them?
NEED COREFERENCE RESOLUTION: Yes => THOUGHT: I need replace 'them' with 'PyTorch and Tensorflow' in now question. => OUTPUT QUESTION: What is the different between PyTorch and Tensorflow?
-------------------
HISTORY:
[{history}]
NOW QUESTION: {question}
NEED COREFERENCE RESOLUTION: '''

Hier sind 4 Referenzbeispiele für ChatGPT. Das erste ist ein leerer Konversationsverlauf, das zweite ist das einfachste Beispiel, das dritte ist ein Beispiel für einen Ersetzungsfehler und das letzte ist ein Beispiel für das Ersetzen zweier Referenten.

Im Format folgt auf „HISTORY:“ der historische Kontext. Zur Unterscheidung von anderen Zeilen wird im Format vor jeder Frage „F:“ und vor jeder Antwort „A:“ eingefügt. „JETZT FRAGE“ ist die neueste Fragerunde. Nach der Zeile „NEED COREFERENCE RESOLUTION:“ gibt es eine Ableitung von CoT. Lassen Sie LLM zunächst feststellen, ob „COREFERENCE RESOLUTION“ durchgeführt werden muss, und dann „THOUGHT:“, um zu sehen, ob es erfolgreich ist, wenn versucht wird, es zu ersetzen. Abschließend wird die umgeschriebene Frage nach „OUTPUT QUESTION:“ ausgegeben.

Wenn Sie die Rückgabe von LLM abschließend analysieren, müssen Sie nur das Format der von LLM zurückgegebenen Zeichenfolge zerlegen. Nur wenn auf „NEED COREFERENCE RESOLUTION:“ ein „Yes“ folgt, wird die letzte Frage durch die letzte „OUTPUT QUESTION“ umgeschrieben :".

Schauen wir uns als Nächstes die Auswirkung der Verwendung dieser Eingabeaufforderung oder der beiden oben genannten fehlgeschlagenen Beispiele, LLM oder ChatGPT, an:

history = '''When was GPT4 released?
GPT4 was released in 2023'''
question = 'What progress has been made in computer vision this year?'

zurückkehren:

Yes => THOUGHT: I need to replace "this year" with "2023" in the now question. => OUTPUT QUESTION: What progress has been made in computer vision in 2023?
```python
可以看到 ChatGPT 成功返回了我们想要的结果,成功将“this year”替换成“2023”。



下一个例子:


```python
history = '''What is GPT3?
GPT-3 (Generative Pre-trained Transformer 3) is a state-of-the-art language processing model developed by OpenAI.
When was GPT4 released?
GPT4 was released in 2023'''
question = 'What is the difference between the two? What are the advantages of the latter?'

zurückkehren:

Yes => THOUGHT: I need to replace 'the two' with 'GPT-3 and GPT-4' and 'the latter' with 'GPT-4' in the now question. => OUTPUT QUESTION: What is the difference between GPT-3 and GPT-4? What are the advantages of GPT-4?

Sie können dieses komplexe Problem erkennen und erfolgreich „die beiden“ durch „GPT-3 und GPT-4“ und „letzteres“ durch „GPT-4“ ersetzen.

04. Zusammenfassung

Ausgehend von der Lösung eines spezifischen Problems bei der Optimierung des RAG-Systems wird in diesem Artikel die Methode zur Verwendung von LLM-Prompt-Engineering zur Analyse traditioneller NLP-Probleme und zur Erzielung bestimmter Qualitätsverbesserungen erörtert. Wie Sie sehen, ist das Schreiben von Eingabeaufforderungen manchmal einfach, manchmal aber auch eine schwierige Aufgabe. Nachdem LLM populär geworden war, bildete und entwickelte sich daher nach und nach der Bereich des Prompt-Engineering-Bereichs, und es entstanden endlos verschiedene Methoden des Prompt-Schreibens. Möglicherweise ist die letzte in diesem Artikel gezeigte Eingabeaufforderung nicht die optimale Lösung, aber sie muss viel besser sein als die herkömmliche NLP-Methode. Dies lässt uns auch erkennen, dass die Verwendung großer LLM-Modelle tatsächlich dazu beitragen kann, viele Probleme im traditionellen NLP-Bereich zu optimieren und zu lösen. Vielleicht ist dies der Grund, warum große Modelle leistungsstark sind.

Da die Fähigkeiten großer Modelle nach GPT-4 immer stärker werden, glaube ich, dass viele Probleme im NLP-Bereich in vielen Jahren möglicherweise keine Probleme mehr darstellen und die allgemeine künstliche Intelligenz langsam auf uns zukommen wird.

Tang Xiaoou, Gründer von SenseTime, verstarb im Alter von 55 Jahren. Im Jahr 2023 stagnierte PHP . Das Hongmeng-System steht kurz vor der Unabhängigkeit und viele Universitäten haben „Hongmeng-Kurse“ eingerichtet. Die PC-Version von Quark Browser hat mit internen Tests begonnen . ByteDance wurde von OpenAI „verboten“. Das Startup-Unternehmen von Zhihuijun wurde mit einem Betrag von über 600 Millionen Yuan und einer Pre-Money-Bewertung von 3,5 Milliarden Yuan refinanziert. KI-Code-Assistenten sind so beliebt, dass sie nicht einmal in der Programmierung mithalten können Sprachrankings . Das 5G-Modem und die Hochfrequenztechnologie des Mate 60 Pro liegen weit vorne. No Star, No Fix MariaDB spaltet SkySQL ab und gründet sich als unabhängiges Unternehmen
{{o.name}}
{{m.name}}

Supongo que te gusta

Origin my.oschina.net/u/4209276/blog/10322591
Recomendado
Clasificación