2023-08-29 21:34:46 +00:00
# PAL (Program Destekli Dil Modelleri)
2023-04-08 08:23:03 +00:00
import { Callout, FileTree } from 'nextra-theme-docs'
import {Screenshot} from 'components/screenshot'
import PAL from '../../img/pal.png'
2023-08-29 21:34:46 +00:00
[Gao ve ekibi, (2022)](https://arxiv.org/abs/2211.10435), doğal dil problemlerini okumak ve ara adı m olarak önermeleri oluşturmak için LLM'leri kullanan bir metod sunmuştur. Program destekli dil modelleri (PAL) olarak adlandı rı lan bu yöntem, çözümü Python yorumlayı cı sı gibi programlamaya dayalı bir çalı şma zamanı na devrederek, düşünce zinciri isteminin serbest formatta çözüm elde etme yönteminden farklı dı r.
2023-04-08 08:23:03 +00:00
<Screenshot src={PAL} alt="PAL" />
2023-08-29 21:34:46 +00:00
Resim Kaynağı : [Gao ve ekibi, (2022)](https://arxiv.org/abs/2211.10435)
2023-04-08 08:23:03 +00:00
2023-08-29 21:34:46 +00:00
Bir örneği, LangChain ve OpenAI GPT-3 kullanarak inceleyelim. Python yorumlayı cı sı nı kullanarak sorulan soruyu yorumlayabilen ve bir cevap sağlayabilen basit bir uygulama geliştirmek istiyoruz.
2023-04-08 08:23:03 +00:00
2023-08-29 21:34:46 +00:00
Özellikle, LLM'yi tarih anlama gerektiren soruları yanı tlamak için kullanabilen bir işlevsellik oluşturma ilgisi duyuyoruz. LLM'ye, [buradan](https://github.com/reasoning-machines/pal/blob/main/pal/prompt/date_understanding_prompt.py) alı nan birkaç örnek içeren bir istem sunacağı z.
2023-04-08 08:23:03 +00:00
2023-08-29 21:34:46 +00:00
İhtiyacı mı z olan importlar şunlardı r:
2023-04-08 08:23:03 +00:00
```python
import openai
from datetime import datetime
from dateutil.relativedelta import relativedelta
import os
from langchain.llms import OpenAI
from dotenv import load_dotenv
```
2023-08-29 21:34:46 +00:00
Öncelikle birkaç şeyi yapı landı ralı m:
2023-04-08 08:23:03 +00:00
```python
load_dotenv()
2023-08-29 21:34:46 +00:00
# API configuration
2023-04-08 08:23:03 +00:00
openai.api_key = os.getenv("OPENAI_API_KEY")
2023-08-29 21:34:46 +00:00
# for LangChain
2023-04-08 08:23:03 +00:00
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")
```
2023-08-29 21:34:46 +00:00
Model örneğini kurulmuş hali:
2023-04-08 08:23:03 +00:00
```python
llm = OpenAI(model_name='text-davinci-003', temperature=0)
```
2023-08-29 21:34:46 +00:00
İstem ve sorunun kurulumu:
2023-04-08 08:23:03 +00:00
```python
2023-08-29 21:34:46 +00:00
question = "Bugün 27 Şubat 2023. Tam 25 yı l önce doğmuştum. Doğduğum tarih MM/DD/YYYY formatı nda neydi?"
2023-04-08 08:23:03 +00:00
DATE_UNDERSTANDING_PROMPT = """
2023-08-29 21:34:46 +00:00
# S: 2015 yı lı na 36 saat kaldı . Bir hafta sonra günün tarihi MM/DD/YYYY formatı nda ne olacak?
# Eğer 2015 yı lı na 36 saat kaldı ysa, bugün 36 saat öncesidir.
2023-04-08 08:23:03 +00:00
today = datetime(2015, 1, 1) - relativedelta(hours=36)
2023-08-29 21:34:46 +00:00
# Bir hafta sonrası ,
2023-04-08 08:23:03 +00:00
one_week_from_today = today + relativedelta(weeks=1)
2023-08-29 21:34:46 +00:00
# Cevap %m/%d/%Y formatı nda
2023-04-08 08:23:03 +00:00
one_week_from_today.strftime('%m/%d/%Y')
2023-08-29 21:34:46 +00:00
# S: 2019'un ilk günü bir Salı ’ dı r ve bugün 2019'un ilk Pazartesi'si. Bugünün tarihi MM/DD/YYYY formatı nda ne?
# Eğer 2019’ un ilk günü bir Salı ve bugün 2019’ un ilk Pazartesi’ si ise, bu, bugünün 6 gün sonrası olduğu anlamı na gelir.
2023-04-08 08:23:03 +00:00
today = datetime(2019, 1, 1) + relativedelta(days=6)
2023-08-29 21:34:46 +00:00
# Cevap %m/%d/%Y formatı nda
2023-04-08 08:23:03 +00:00
today.strftime('%m/%d/%Y')
2023-08-29 21:34:46 +00:00
# S: Konser 06/01/1943'te olması planlanı yordu, ancak bugüne bir gün ertelendi. 10 gün önceki tarih MM/DD/YYYY formatı nda neydi?
# Eğer konser 06/01/1943’ te olması planlanı yor ama bir günlük gecikmeyle bugüne denk geldiyse, o zaman bugün bir gün sonrası dı r.
2023-04-08 08:23:03 +00:00
today = datetime(1943, 6, 1) + relativedelta(days=1)
# 10 gün önce,
ten_days_ago = today - relativedelta(days=10)
2023-08-29 21:34:46 +00:00
# Cevap %m/%d/%Y formatı nda
2023-04-08 08:23:03 +00:00
ten_days_ago.strftime('%m/%d/%Y')
2023-08-29 21:34:46 +00:00
# S: Bugün 4/19/1969. 24 saat sonra tarih MM/DD/YYYY formatı nda ne olacak?
# Bugün 4/19/1969.
2023-04-08 08:23:03 +00:00
today = datetime(1969, 4, 19)
2023-08-29 21:34:46 +00:00
# 24 saat sonra,
2023-04-08 08:23:03 +00:00
later = today + relativedelta(hours=24)
2023-08-29 21:34:46 +00:00
# Cevap %m/%d/%Y formatı nda
2023-04-08 08:23:03 +00:00
today.strftime('%m/%d/%Y')
2023-08-29 21:34:46 +00:00
# S: Jane bugünün 3/11/2002 olduğunu düşündü, ancak bugün aslı nda 12 Mart, yani 1 gün sonrası . 24 saat sonrası tarih MM/DD/YYYY formatı nda ne olacak?
# Eğer Jane bugünün 3/11/2002 olduğunu düşündü, ancak bugün aslı nda 12 Mart ise, o zaman bugün 3/12/2002’ dir.
2023-04-08 08:23:03 +00:00
today = datetime(2002, 3, 12)
# 24 saat sonra,
later = today + relativedelta(hours=24)
2023-08-29 21:34:46 +00:00
# Cevap %m/%d/%Y formatı nda
2023-04-08 08:23:03 +00:00
later.strftime('%m/%d/%Y')
2023-08-29 21:34:46 +00:00
# S: Jane, 2001'in Şubat ayı nı n son gününde doğdu. Bugün onun 16. yaş günü. Dünkünün tarihi MM/DD/YYYY formatı nda neydi?
# Eğer Jane 2001'in Şubat ayı nı n son gününde doğdu ve bugün onun 16. yaşı ise, o zaman bugün 16 yı l sonrası dı r.
2023-04-08 08:23:03 +00:00
today = datetime(2001, 2, 28) + relativedelta(years=16)
# Dün,
yesterday = today - relativedelta(days=1)
2023-08-29 21:34:46 +00:00
# Cevap %m/%d/%Y formatı nda
2023-04-08 08:23:03 +00:00
yesterday.strftime('%m/%d/%Y')
# S: {question}
""".strip() + '\n'
```
```python
2023-08-29 21:34:46 +00:00
llm_out = llm.execute(DATE_UNDERSTANDING_PROMPT.format(question=question))
2023-04-08 08:23:03 +00:00
print(llm_out)
```
2023-08-29 21:34:46 +00:00
Bu, aşağı dakini çı ktı olarak verecektir:
```
# Eğer bugün 27 Şubat 2023 ve tam 25 yı l önce doğduysam, o zaman doğum tarihim 25 yı l öncesidir.
today = datetime(2023, 2, 27)
# Doğum tarihim 25 yı l öncesidir,
born = today - relativedelta(years=25)
# Cevap %m/%d/%Y formatı nda
born.strftime('%m/%d/%Y')
```
`llm_out`'un içeriği bir Python kodu parçacı ğı dı r. Aşağı da, bu Python kod parçacı ğı nı çalı ştı rmak için `exec` komutu kullanı lmaktadı r.
2023-04-08 08:23:03 +00:00
```python
exec(llm_out)
print(born)
```
2023-08-29 21:34:46 +00:00
Bu, aşağı dakini çı ktı olarak verecektir: `02/27/1998`