## 3 Methods
### Automatic Classification of Review Data  
The training and testing of the classifier included the following steps. First, each sentence was retrieved from textual review content as the model input alongside its referred topical categories. Second, sentences were chopped up into tokens, with punctuation and stop words being removed. Subsequently, the corpus was randomly categorized into training, validating, and testing datasets. The present study adopted TextRCNN (recurrent convolutional neural network) for classifier training and testing. TextRCNN was developed by [PERSON] et al. (2018) as a deep neural model to capture text semantics. RCNN exploits recurrent structure's capabilities for capturing contextual information and learning text feature representations. RCNN's structure is presented in Figure 2. RCNN defines \(w_{i-1}\) and \(w_{i+1}\) as the previous and next words of \(w_{i}\). \(\alpha\) is \(l\) or \(r\) to represent left or right. \(\beta\) is \(w_{i}\), \(w_{i-1}\), \(w_{i+1}\), and so on. \(c_{\alpha}(\beta)\) represents the word \(\beta\)'s left or right context as a dense vector with \(|c|\) real value elements. \(f\) donates a non-linear activation function. \(W^{(\alpha)}\) represents a matrix for transforming a hidden layer into the subsequent one. \(W^{(\alpha)}\) represents a matrix for combining the semantics of the present word with the subsequent word's left or right context. \(e(\beta)\) donates word \(\beta\)'s word embedding as a dense vector with \(|e|\) real value elements. By using Equations (1) and (2), the word \(w_{i}\)'s left- and right-side context vectors \(c_{l}(w_{i})\) and \(c_{r}(w_{i})\) can be obtained. By using Equation (3), the representation \(x_{i}\) of the word \(w_{i}\) turns into the word vector's concatenation, the forward and backward context vector. The forward and backward recurrent neural networks (RNNs) are adopted for obtaining the representations of individual words' forward and backward contexts. In Equation (4), \(b^{(2)}\) donates the bias vector. A linear transformation and a tanh activation function are adopted to \begin{table}
\begin{tabular}{c c c} \hline \hline
**Categories** & **Descriptions** & **Examples** \\ \hline \multirow{2}{*}{Learning resources} & \multirow{2}{*}{Textbooks, notes, handouts, slides} & “The lecture material aligns well with the textbook he’s written for the course, & \\  & & as well as the think python textbook” & \\ \hline \multirow{2}{*}{Instructor} & \multirow{2}{*}{Instructor knowledge, accessibility, enthusiasm, humor, instructional pace} & “The instructor was more involved than I have experienced in many MOOCs, which greatly appreciated and enhanced the learning experience” \\ \hline \multirow{2}{*}{Relationship} & \multirow{2}{*}{Peer interaction, leaner–instructor interaction} & “It was a good idea to allow users to interact, I like to read comments made by other students” \\ \hline \multirow{2}{*}{Process} & Feedback, problem-solving, use of cases and examples & “It provided a variety of examples and made me experiment a lot” \\ \hline \multirow{2}{*}{Assessment} & Quizzes, assignments, projects, exercises, experiments, grading & “The assignment was quite difficult, so we could maintain the level” \\ \hline \hline \end{tabular}
\end{table} 
Table 1: _Cont._simultaneously. The result \(y_{i}^{(2)}\) is then obtained and sent to the following layer. In the max pooling layer, representations \(y^{(3)}\) of all words are obtained by using Equation (5), where the max represents an element-wise function. \[c_{l}(w_{i})=f(W^{(l)}c_{l}(w_{i-1})+W^{(sl)}e(w_{i-1})) \tag{1}\]  
\[c_{r}(w_{i})=f(W^{(l)}c_{r}(w_{i+1})+W^{(sl)}e(w_{i+1})) \tag{2}\]  
\[x_{i}=[c_{l}(w_{i});e(w);c_{r}(w_{i})] \tag{3}\]  
\[y_{i}^{(2)}=\tan{\rm{h}}(W^{(2)}x_{i}+b^{(2)}) \tag{4}\]  
\[y^{(3)}=\max_{i=1}^{n}\!\!y_{i}^{(2)} \tag{5}\]  
To measure how the trained classifier performs, precision, recall, and F1 scores were adopted [51], as shown in Equations (6)-(8).