Ανάπτυξη σύνοψης κειμένου: Εκμάθηση Python με GPT-3.5

Ανάπτυξη σύνοψης κειμένου: Εκμάθηση Python με GPT-3.5

Κόμβος πηγής: 2571007

Ανάπτυξη σύνοψης κειμένου: Εκμάθηση Python με GPT-3.5
Εικόνα από frimufilms on Freepik
 

Αυτή είναι μια εποχή όπου η ανακάλυψη AI έρχεται καθημερινά. Δεν είχαμε πολλά τεχνητή νοημοσύνη που δημιουργήθηκαν δημόσια πριν από μερικά χρόνια, αλλά τώρα η τεχνολογία είναι προσβάσιμη σε όλους. Είναι εξαιρετικό για πολλούς μεμονωμένους δημιουργούς ή εταιρείες που θέλουν να εκμεταλλευτούν σημαντικά την τεχνολογία για να αναπτύξουν κάτι περίπλοκο, το οποίο μπορεί να πάρει πολύ χρόνο.

Μια από τις πιο απίστευτες ανακαλύψεις που αλλάζουν τον τρόπο εργασίας μας είναι η κυκλοφορία του Μοντέλο GPT-3.5 από την OpenAI. Τι είναι το μοντέλο GPT-3.5; Αν αφήσω το μοντέλο να μιλήσει μόνο του. Σε αυτή την περίπτωση, η απάντηση είναι «ένα εξαιρετικά προηγμένο μοντέλο τεχνητής νοημοσύνης στον τομέα της επεξεργασίας φυσικής γλώσσας, με τεράστιες βελτιώσεις στη δημιουργία κειμένου με ακρίβεια και σχετικό με τα συμφραζόμενατ ».

Το OpenAI παρέχει ένα API για το μοντέλο GPT-3.5 που μπορούμε να χρησιμοποιήσουμε για να αναπτύξουμε μια απλή εφαρμογή, όπως μια σύνοψη κειμένου. Για να το κάνουμε αυτό, μπορούμε να χρησιμοποιήσουμε την Python για να ενσωματώσουμε απρόσκοπτα το μοντέλο API στην προβλεπόμενη εφαρμογή μας. Πώς μοιάζει η διαδικασία; Ας μπούμε σε αυτό.

Υπάρχουν μερικές προϋποθέσεις πριν ακολουθήσετε αυτό το σεμινάριο, όπως:

– Γνώση Python, συμπεριλαμβανομένης της γνώσης χρήσης εξωτερικών βιβλιοθηκών και IDE

– Κατανόηση των API και χειρισμός του τελικού σημείου με την Python

– Πρόσβαση στα OpenAI API

Για να αποκτήσουμε πρόσβαση στα OpenAI API, πρέπει να εγγραφούμε στο Πλατφόρμα προγραμματιστών OpenAI και επισκεφθείτε τα κλειδιά Προβολή API στο προφίλ σας. Στον ιστό, κάντε κλικ στο κουμπί "Δημιουργία νέου μυστικού κλειδιού" για να αποκτήσετε πρόσβαση στο API (Δείτε την παρακάτω εικόνα). Θυμηθείτε να αποθηκεύσετε τα κλειδιά, καθώς δεν θα εμφανιστούν τα κλειδιά μετά από αυτό.
 

Ανάπτυξη σύνοψης κειμένου: Εκμάθηση Python με GPT-3.5
Εικόνα από συγγραφέα
 

Έχοντας όλη την προετοιμασία έτοιμη, ας προσπαθήσουμε να κατανοήσουμε τα βασικά του μοντέλου OpenAI API.

Η Οικογενειακό μοντέλο GPT-3.5 καθορίστηκε για πολλές γλωσσικές εργασίες και κάθε μοντέλο στην οικογένεια υπερέχει σε ορισμένες εργασίες. Για αυτό το παράδειγμα εκμάθησης, θα χρησιμοποιούσαμε το gpt-3.5-turbo καθώς ήταν το προτεινόμενο τρέχον μοντέλο όταν γράφτηκε αυτό το άρθρο για την ικανότητά του και την οικονομική του απόδοση.

Συχνά χρησιμοποιούμε το text-davinci-003 στον οδηγό OpenAI, αλλά θα χρησιμοποιούσαμε το τρέχον μοντέλο για αυτό το σεμινάριο. Θα στηριζόμασταν στο Ολοκλήρωση συνομιλίας τελικό σημείο αντί για Ολοκλήρωση επειδή το τρέχον προτεινόμενο μοντέλο είναι μοντέλο συνομιλίας. Ακόμα κι αν το όνομα ήταν μοντέλο συνομιλίας, λειτουργεί για οποιαδήποτε γλωσσική εργασία.

Ας προσπαθήσουμε να καταλάβουμε πώς λειτουργεί το API. Αρχικά, πρέπει να εγκαταστήσουμε τα τρέχοντα πακέτα OpenAI. 

pip install openai

 

Αφού ολοκληρώσουμε την εγκατάσταση του πακέτου, θα προσπαθήσουμε να χρησιμοποιήσουμε το API συνδέοντας μέσω του τερματικού σημείου ChatCompletion. Ωστόσο, πρέπει να ρυθμίσουμε το περιβάλλον πριν συνεχίσουμε.

Στο αγαπημένο σας IDE (για μένα, είναι VS Code), δημιουργήστε δύο αρχεία που ονομάζονται .env και summarizer_app.py, παρόμοια με την παρακάτω εικόνα.

 

Ανάπτυξη σύνοψης κειμένου: Εκμάθηση Python με GPT-3.5
Εικόνα από συγγραφέα
 

Η summarizer_app.py είναι όπου θα κατασκευάζαμε την απλή εφαρμογή σύνοψης και το .env αρχείο είναι όπου θα αποθηκεύαμε το κλειδί API μας. Για λόγους ασφαλείας, συνιστάται πάντα να διαχωρίζουμε το κλειδί API μας σε άλλο αρχείο αντί να το κάνουμε σκληρό κώδικα στο αρχείο Python.

Στο .env αρχείο βάλτε την παρακάτω σύνταξη και αποθηκεύστε το αρχείο. Αντικαταστήστε το your_api_key_here με το πραγματικό κλειδί API. Μην αλλάζετε το κλειδί API σε αντικείμενο συμβολοσειράς. αφήστε τα όπως είναι. 

OPENAI_API_KEY=your_api_key_here

 

Για να κατανοήσετε καλύτερα το GPT-3.5 API. θα χρησιμοποιούσαμε τον ακόλουθο κώδικα για να δημιουργήσουμε τη λέξη σύνοψη.

openai.ChatCompletion.create( model="gpt-3.5-turbo", max_tokens=100, temperature=0.7, top_p=0.5, frequency_penalty=0.5, messages=[ { "role": "system", "content": "You are a helpful assistant for text summarization.", }, { "role": "user", "content": f"Summarize this for a {person_type}: {prompt}", }, ],
)

 

Ο παραπάνω κώδικας είναι ο τρόπος με τον οποίο αλληλεπιδρούμε με το μοντέλο OpenAI API GPT-3.5. Χρησιμοποιώντας το ChatCompletion API, δημιουργούμε μια συνομιλία και θα λάβουμε το επιδιωκόμενο αποτέλεσμα αφού περάσουμε το μήνυμα.

Ας αναλύσουμε κάθε μέρος για να τα κατανοήσουμε καλύτερα. Στην πρώτη γραμμή, χρησιμοποιούμε το openai.ChatCompletion.create κώδικα για τη δημιουργία της απάντησης από την προτροπή που θα περνούσαμε στο API.

Στην επόμενη γραμμή, έχουμε τις υπερπαραμέτρους μας που χρησιμοποιούμε για να βελτιώσουμε τις εργασίες κειμένου μας. Ακολουθεί η περίληψη κάθε συνάρτησης υπερπαραμέτρου:

  • model: Η οικογένεια μοντέλων που θέλουμε να χρησιμοποιήσουμε. Σε αυτό το σεμινάριο, χρησιμοποιούμε το τρέχον προτεινόμενο μοντέλο (gpt-3.5-turbo).
  • max_tokens: Το ανώτερο όριο των λέξεων που δημιουργούνται από το μοντέλο. Βοηθά στον περιορισμό του μήκους του παραγόμενου κειμένου.
  • temperature: Η τυχαιότητα της εξόδου του μοντέλου, με υψηλότερη θερμοκρασία, σημαίνει πιο διαφοροποιημένο και δημιουργικό αποτέλεσμα. Το εύρος τιμών είναι από 0 έως άπειρο, αν και τιμές περισσότερες από 2 δεν είναι κοινές. 
  • top_p: Η δειγματοληψία Top P ή top-k ή η δειγματοληψία πυρήνα είναι μια παράμετρος για τον έλεγχο της δεξαμενής δειγματοληψίας από την κατανομή εξόδου. Για παράδειγμα, η τιμή 0.1 σημαίνει ότι το μοντέλο λαμβάνει δείγματα εξόδου μόνο από το ανώτερο 10% της διανομής. Το εύρος τιμών ήταν μεταξύ 0 και 1. υψηλότερες τιμές σημαίνουν πιο ποικίλο αποτέλεσμα.
  • frequency_penalty: Η ποινή για το διακριτικό επανάληψης από την έξοδο. Η τιμή κυμαίνεται μεταξύ -2 και 2, όπου οι θετικές τιμές θα απέτρεπαν το μοντέλο από το να επαναλαμβάνει το διακριτικό ενώ οι αρνητικές τιμές ενθαρρύνουν το μοντέλο να χρησιμοποιεί περισσότερες επαναλαμβανόμενες λέξεις. Το 0 σημαίνει χωρίς πέναλτι.
  • messages: Η παράμετρος όπου περνάμε την προτροπή κειμένου μας για επεξεργασία με το μοντέλο. Διαβιβάζουμε μια λίστα λεξικών όπου το κλειδί είναι το αντικείμενο ρόλου (είτε "σύστημα", "χρήστης" ή "βοηθός") που βοηθά το μοντέλο να κατανοήσει το πλαίσιο και τη δομή ενώ οι τιμές είναι το πλαίσιο.
    •  Ο ρόλος «σύστημα» είναι οι καθορισμένες κατευθυντήριες γραμμές για τη συμπεριφορά του μοντέλου «βοηθού»,
    •  Ο ρόλος «χρήστης» αντιπροσωπεύει την προτροπή από το άτομο που αλληλεπιδρά με το μοντέλο,
    •  Ο ρόλος "βοηθός" είναι η απάντηση στην προτροπή "χρήστη".

Έχοντας εξηγήσει την παραπάνω παράμετρο, μπορούμε να δούμε ότι το messages Η παραπάνω παράμετρος έχει δύο αντικείμενα λεξικού. Το πρώτο λεξικό είναι πώς ορίσαμε το μοντέλο ως σύνοψη κειμένου. Το δεύτερο είναι όπου θα περνούσαμε το κείμενό μας και θα λάβαμε το αποτέλεσμα της σύνοψης. 

Στο δεύτερο λεξικό, θα δείτε επίσης τη μεταβλητή person_type και prompt. ο person_type είναι μια μεταβλητή που χρησιμοποίησα για να ελέγξω το συνοπτικό στυλ, το οποίο θα δείξω στο σεμινάριο. Ενώ το prompt είναι όπου θα περνούσαμε το κείμενό μας για να συνοψιστεί.

Συνεχίζοντας με το σεμινάριο, τοποθετήστε τον παρακάτω κώδικα στο summarizer_app.py αρχείο και θα προσπαθήσουμε να δούμε πώς λειτουργεί η παρακάτω λειτουργία.

import openai
import os
from dotenv import load_dotenv load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY") def generate_summarizer( max_tokens, temperature, top_p, frequency_penalty, prompt, person_type,
): res = openai.ChatCompletion.create( model="gpt-3.5-turbo", max_tokens=100, temperature=0.7, top_p=0.5, frequency_penalty=0.5, messages= [ { "role": "system", "content": "You are a helpful assistant for text summarization.", }, { "role": "user", "content": f"Summarize this for a {person_type}: {prompt}", }, ], ) return res["choices"][0]["message"]["content"]

 

Ο παραπάνω κώδικας είναι όπου δημιουργούμε μια συνάρτηση Python που δέχεται διάφορες παραμέτρους που έχουμε συζητήσει προηγουμένως και επιστρέφει την έξοδο σύνοψης κειμένου. 

Δοκιμάστε την παραπάνω συνάρτηση με την παράμετρό σας και δείτε την έξοδο. Στη συνέχεια, ας συνεχίσουμε το σεμινάριο για να δημιουργήσουμε μια απλή εφαρμογή με το πακέτο streamlit.

Ροή είναι ένα πακέτο Python ανοιχτού κώδικα που έχει σχεδιαστεί για τη δημιουργία εφαρμογών ιστού μηχανικής εκμάθησης και επιστήμης δεδομένων. Είναι εύκολο στη χρήση και διαισθητικό, επομένως συνιστάται για πολλούς αρχάριους. 

Ας εγκαταστήσουμε το πακέτο streamlit πριν συνεχίσουμε με το σεμινάριο.

pip install streamlit

 

Αφού ολοκληρωθεί η εγκατάσταση, βάλτε τον παρακάτω κώδικα στο summarizer_app.py.

import streamlit as st #Set the application title
st.title("GPT-3.5 Text Summarizer") #Provide the input area for text to be summarized
input_text = st.text_area("Enter the text you want to summarize:", height=200) #Initiate three columns for section to be side-by-side
col1, col2, col3 = st.columns(3) #Slider to control the model hyperparameter
with col1: token = st.slider("Token", min_value=0.0, max_value=200.0, value=50.0, step=1.0) temp = st.slider("Temperature", min_value=0.0, max_value=1.0, value=0.0, step=0.01) top_p = st.slider("Nucleus Sampling", min_value=0.0, max_value=1.0, value=0.5, step=0.01) f_pen = st.slider("Frequency Penalty", min_value=-1.0, max_value=1.0, value=0.0, step=0.01) #Selection box to select the summarization style
with col2: option = st.selectbox( "How do you like to be explained?", ( "Second-Grader", "Professional Data Scientist", "Housewives", "Retired", "University Student", ), ) #Showing the current parameter used for the model with col3: with st.expander("Current Parameter"): st.write("Current Token :", token) st.write("Current Temperature :", temp) st.write("Current Nucleus Sampling :", top_p) st.write("Current Frequency Penalty :", f_pen) #Creating button for execute the text summarization
if st.button("Summarize"): st.write(generate_summarizer(token, temp, top_p, f_pen, input_text, option))

 

Προσπαθήστε να εκτελέσετε τον ακόλουθο κώδικα στη γραμμή εντολών για να εκκινήσετε την εφαρμογή.

streamlit run summarizer_app.py

 

Εάν όλα λειτουργούν καλά, θα δείτε την παρακάτω εφαρμογή στο προεπιλεγμένο πρόγραμμα περιήγησής σας.

 

Ανάπτυξη σύνοψης κειμένου: Εκμάθηση Python με GPT-3.5
Εικόνα από συγγραφέα
 

Λοιπόν, τι συνέβη στον παραπάνω κώδικα; Επιτρέψτε μου να εξηγήσω εν συντομία κάθε συνάρτηση που χρησιμοποιήσαμε:

  • .st.title: Δώστε το κείμενο τίτλου της εφαρμογής web.
  • .st.write: Εγγράφει το όρισμα στην εφαρμογή. θα μπορούσε να είναι οτιδήποτε άλλο παρά κυρίως ένα κείμενο συμβολοσειράς.
  • .st.text_area: Παρέχετε μια περιοχή για την εισαγωγή κειμένου που μπορεί να αποθηκευτεί στη μεταβλητή και να χρησιμοποιηθεί για την προτροπή για τη σύνοψη κειμένου μας
  • .st.columns: Αντικείμενο δοχείων για να παρέχει αλληλεπίδραση δίπλα-δίπλα.
  • .st.slider: Παρέχετε ένα γραφικό στοιχείο ρυθμιστικού με καθορισμένες τιμές με τις οποίες μπορεί να αλληλεπιδράσει ο χρήστης. Η τιμή αποθηκεύεται σε μια μεταβλητή που χρησιμοποιείται ως παράμετρος μοντέλου.
  • .st.selectbox: Παρέχετε ένα γραφικό στοιχείο επιλογής στους χρήστες για να επιλέξουν το στυλ σύνοψης που θέλουν. Στο παραπάνω παράδειγμα, χρησιμοποιούμε πέντε διαφορετικά στυλ.
  • .st.expander: Παρέχετε ένα κοντέινερ που οι χρήστες μπορούν να επεκτείνουν και να κρατούν πολλά αντικείμενα.
  • .st.button: Παρέχετε ένα κουμπί που εκτελεί την προβλεπόμενη λειτουργία όταν το πατάει ο χρήστης.

Καθώς το streamlit θα σχεδίαζε αυτόματα τη διεπαφή χρήστη ακολουθώντας τον δεδομένο κώδικα από πάνω προς τα κάτω, θα μπορούσαμε να εστιάσουμε περισσότερο στην αλληλεπίδραση.  

Έχοντας όλα τα κομμάτια στη θέση τους, ας δοκιμάσουμε την εφαρμογή σύνοψης με ένα παράδειγμα κειμένου. Για το παράδειγμά μας, θα χρησιμοποιούσα το Σελίδα Θεωρία της Σχετικότητας στη Wikipedia κείμενο προς σύνοψη. Με μια προεπιλεγμένη παράμετρο και στυλ δεύτερης τάξης, έχουμε το ακόλουθο αποτέλεσμα.

Albert Einstein was a very smart scientist who came up with two important ideas about how the world works. The first one, called special relativity, talks about how things move when there is no gravity. The second one, called general relativity, explains how gravity works and how it affects things in space like stars and planets. These ideas helped us understand many things in science, like how particles interact with each other and even helped us discover black holes! 

 

Μπορεί να έχετε διαφορετικό αποτέλεσμα από το παραπάνω. Ας δοκιμάσουμε το στυλ Housewives και ας τροποποιήσουμε λίγο την παράμετρο (Token 100, Temperature 0.5, Nucleus Sampling 0.5, Frequency Penalty 0.3).

The theory of relativity is a set of physics theories proposed by Albert Einstein in 1905 and 1915. It includes special relativity, which applies to physical phenomena without gravity, and general relativity, which explains the law of gravitation and its relation to the forces of nature. The theory transformed theoretical physics and astronomy in the 20th century, introducing concepts like 4-dimensional spacetime and predicting astronomical phenomena like black holes and gravitational waves.

 

Όπως μπορούμε να δούμε, υπάρχει διαφορά στο στυλ για το ίδιο κείμενο που παρέχουμε. Με μια προτροπή αλλαγής και μια παράμετρο, η εφαρμογή μας μπορεί να είναι πιο λειτουργική. 

Η συνολική εμφάνιση της εφαρμογής σύνοψης κειμένου φαίνεται στην παρακάτω εικόνα.

 

Ανάπτυξη σύνοψης κειμένου: Εκμάθηση Python με GPT-3.5
Εικόνα από συγγραφέα
 

Αυτό είναι το σεμινάριο για τη δημιουργία ανάπτυξης εφαρμογών σύνοψης κειμένου με το GPT-3.5. Θα μπορούσατε να τροποποιήσετε ακόμη περισσότερο την εφαρμογή και να την αναπτύξετε.

Το Generative AI ανεβαίνει και θα πρέπει να αξιοποιήσουμε την ευκαιρία δημιουργώντας μια φανταστική εφαρμογή. Σε αυτό το σεμινάριο, θα μάθουμε πώς λειτουργούν τα GPT-3.5 OpenAI API και πώς να τα χρησιμοποιήσουμε για τη δημιουργία μιας εφαρμογής σύνοψης κειμένου με τη βοήθεια της Python και του πακέτου streamlit.
 
 
Cornellius Yudha Wijaya είναι βοηθός διευθυντής επιστήμης δεδομένων και συγγραφέας δεδομένων. Ενώ εργάζεται με πλήρη απασχόληση στην Allianz Indonesia, του αρέσει να μοιράζεται συμβουλές για Python και Data μέσω των μέσων κοινωνικής δικτύωσης και των μέσων συγγραφής.
 

Σφραγίδα ώρας:

Περισσότερα από KDnuggets